Re : ধারাবাহিক টেক্সট থেকে ইউটিউব ইউআরএল বের করার জন্য রেগুলার এক্সপ্রেশন গ্রেপ মেমো এবং সেখান থেকে yt-dlp করা ~?(প্রশ্নবোধক চিহ্ন) এস্কেপ করা যায় না!? এর পর্ব~
হ্যালো, আমি অযোগ্য।
এটি একটি নিবন্ধের শিরোনাম যা অযোগ্যদের মতো, এটি কোন মাঙ্গা বা অ্যানিমে তা আমি জানি না।
আগের এই নিবন্ধটি।
https://soulminingrig.com/blog/連続したテキストからyoutube-url抜くだけでの正規表現grep/
সেই সময়, আমি অন্য একটি ওয়েব স্ক্র্যাপিং স্ক্রিপ্ট লিখছিলাম এবং ভোর ৪টার দিকে ঘুমিয়ে প্রায় মরতে বসেছিলাম, তাই কমান্ড এবং লেখা দুটোই এলোমেলো।
আমি এটি আবার গুছিয়ে রাখছি।
grep -oP ‘youtube\.com\/watch\?v\=…’ outbox.json > pyaa.txt
উপরেরটি পার্লের রেগুলার এক্সপ্রেশন ব্যবহার করতে পারে।
নিচেরটিও সম্ভব
grep -oP ‘youtube\.com\/watch\?v\=.{11}’ outbox.json > pyaa.txt
এছাড়াও, পার্লের রেগুলার এক্সপ্রেশন ব্যবহার করলে এটি খুব ভারী হয়ে যায়, তাই যদি অনেক অক্ষর থাকে বা স্ক্রিপ্টের মধ্যে ব্যবহার করা হয়, তবে নিচের মতো কমান্ড ব্যবহার করা ভালো হতে পারে।
grep -o ‘youtube\.com/watch?v=…’ outbox.json > pyaa.txt
আসলে, প্রশ্নবোধক চিহ্ন এস্কেপ করা কি শুধু পার্লের রেগুলার এক্সপ্রেশন দিয়েই সম্ভব?
grep -o ‘youtube\.com/watch\?v=…’ outbox.json > owo.txt
উপরেরটি কাজ করে না।
যদি এটি ব্যাকস্ল্যাশ ছাড়া হয়, তবে এটি "পূর্ববর্তী অক্ষরটি 0 বা 1 বার প্রদর্শিত হয় এমন অক্ষরের সাথে মিলে যায়"।
তাই, যখন আমি এটি অনুসন্ধান করলাম, দেখা গেল যে [?] দিয়ে বন্ধনীতে রাখলে এটিকে একটি স্ট্রিং হিসাবে ব্যবহার করা যায়।
https://stackoverflow.com/questions/10602433/how-to-escape-a-question-mark-in-r
grep -o ‘youtube\.com/watch[?]v=…’ outbox.json > pyaa.txt
এতে নিরাপদে ঠিক আছে!
অপ্রয়োজনীয় "/" এবং "\" এবং "<" থাকা লাইনগুলি মুছে ফেলুন!
প্রথমে, আমি আমার গ্রেপ কমান্ড নিয়ে সন্দেহ করেছিলাম, কিন্তু তা ভুল ছিল।
কোনো কারণে, মাস্টোডন পোস্টগুলি এক্সপোর্ট করা outbox.json-এ নিম্নলিখিত আউটপুট দেখা যায়।
class=\"ellipsis\"\u003eyoutube.com/watch?v=DRVp_cmW3N\u003c/span\u003e\u003cspan class=\"invisible\"\u003es\u0026amp;feature=share7\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e\",\"contentMap\":{\"ja\":\"\u003cp\u003e\u003ca
ভালো করে দেখলে, W7G-QtbTWg নামক শেষ স্ট্রিংটির (১১তম অক্ষর) একটি অক্ষর হারিয়ে গেছে এবং একটি ব্যাকস্ল্যাশ হয়ে গেছে! অবশ্যই, এই অবস্থায় এটি একটি বৈধ URL সংরক্ষণ URL হিসাবে আউটপুট করা যাবে না।
youtube.com/watch?v=DRVp_cmW3Nw
youtube.com/watch?v=DRVp_cmW3N\
ভাগ্যক্রমে, সঠিকভাবে প্রদর্শিত URL গুলিও ডুপ্লিকেট হিসাবে গ্রেপ করা হয়েছে, তাই কেবল অপ্রয়োজনীয়গুলি মুছে ফেললেই হবে।
এছাড়াও, কিছু URL এর শেষে '<' রয়েছে, এটি কী...
sed ‘/\\$\|\/$\|<$/d’ pyaa.txt > nyan.txt
uniq দিয়ে ডুপ্লিকেট এবং নন-ডুপ্লিকেট লাইনগুলি আলাদাভাবে আউটপুট করুন
uniq nyan.txt > nyanya.txt
uniq -u nyan.txt >> nyanya.txt
হয়ে গেছে!!!
সবশেষে sed দিয়ে yt-dlp ফরম্যাটে রূপান্তর করুন
sed ‘s|youtube|yt-dlp -o “/media/ncp/yt/n/%(title)s” -f “bv[ext=mp4]+ba[ext=m4a]” –merge-output-format mp4 https://www.youtube|g’ nyanya.txt > nya.sh
এই পর্যন্ত! আপনার কাজ সফল হোক।
বাকিটা হলো #!/bin/bash যোগ করে এক্সিকিউশন পারমিশন দিয়ে রান করা। আমি মনে করি না কেউ কপি-পেস্ট করবে, তবে সেভ করার ডিরেক্টরি ইত্যাদি পরিবর্তন করতে ভুলবেন না।
সবশেষে wc কমান্ড সম্পর্কে...
আগের প্রশ্ন
echo “youtube.com/watch?v=g5HQFrSk4OA” | wc -c
32
এটি 32 অক্ষর দীর্ঘ বলে মনে হচ্ছে।
সুতরাং, শুধুমাত্র 32 অক্ষরেরগুলি বের করা হবে।
grep -oP ‘^.{32}$’ mstv.txt > mstvtmp.txt
এবং, এটি সফল হয়েছে বলে লেখা আছে, কিন্তু যখন আমি এটি পুনরায় যাচাই করলাম, তখন এটি কাজ করেনি। 32 কে 31 করলে কাজ করেছে। আরে, কেন? কেউ কি আমাকে বলতে পারেন?
দেখা যাচ্ছে যে, wc কমান্ড দিয়ে স্ট্রিং গণনা করলে লাইনের সংখ্যাও অন্তর্ভুক্ত হয়, এবং টাচ (touch) দিয়ে তৈরি একটি খালি ফাইলও 1 হিসাবে প্রদর্শিত হয়। তাই, এটি ব্যবহার করার সময় লাইনের সংখ্যা বিয়োগ করতে হবে।
তাহলে আবার দেখা হবে।
শুভেচ্ছান্তে