ধারাবাহিক টেক্সট থেকে ইউটিউব ইউআরএল বের করার জন্য রেজেক্স গ্রেপ নোট, এবং তারপর yt-dlp ব্যবহার করা

5 min

language: ja bn en es hi pt ru zh-cn zh-tw

শুভ সন্ধ্যা, আমি অযোগ্য।

মাস্টোডনের পোস্ট ডাম্প করলে এরকম দেখায়।

/\u003e\u003ca href=\"https://youtube.com/watch?v=jL4NZ913v8E\u0026amp;feature=share\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"\u003e\u003cspan class=\"invisible\"\u003ehttps://\u003c/span\u003e\u003cspan class=\"ellipsis\"

এবং এই ধারাবাহিক স্ট্রিং থেকে আমি শুধু ইউটিউব ইউআরএল বের করতে চাই।

grep -oP ‘youtube.com\/watch\?v=…………’ outbox.json > mstv.txt

grep -oP ‘youtube.com\/shorts\/…………’ outbox.json > mstv2.txt

আপাতত, www আছে কি নেই তা দিয়ে পার্থক্য করা ঝামেলাপূর্ণ, তাই আমি শুধু youtube.com এর পরের অংশটুকু ম্যাচ করাবো এবং পরে প্রতিস্থাপন করব।

youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\

আমি এখনো বিস্তারিত দেখিনি, কিন্তু কোনো কারণে কিছু এন্ট্রিতে একটি অক্ষর কাটা পড়েছে এবং একটি ব্যাকস্ল্যাশ \ ঢুকে গেছে, তাই আমি sed -i দিয়ে এটি মুছে ফেলব।

sed -i ‘s/\\//g’ mstv.txt

youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg

যেহেতু এটি এরকম দেখায়, আমি সঠিক ইউআরএল স্ট্রিং এর অক্ষর সংখ্যা গণনা করার চেষ্টা করব।

echo “youtube.com/watch?v=g5HQFrSk4OA” | wc -c
32

এটি ৩২ অক্ষরের বলে মনে হচ্ছে।

সুতরাং, আমি শুধু ৩২ অক্ষরের গুলো বের করব।

grep -oP ‘^.{32}$’ mstv.txt > mstvtmp.txt

এটি যেন সফল হয়েছে এমনভাবে লেখা আছে, কিন্তু যখন আমি আবার যাচাই করলাম, তখন কাজ করেনি। ৩২ কে ৩১ করলে কাজ করেছে। আরে, কেন? কেউ কি আমাকে বলতে পারবেন?

grep -oP ‘^.{31}$’ mstv.txt > mstvtmp.txt

youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8pc

যেহেতু এটি এভাবে পুনরাবৃত্তি হয়...

আমি uniq দিয়ে পুনরাবৃত্ত লাইনগুলো মুছে ফেলব।

uniq mstvtmp.txt > newmstv.txt

নিশ্চিত করার জন্য, আমি পুনরাবৃত্তিহীন গুলো খুঁজে বের করে যোগ করব।

uniq -u mstvtmp.txt >> newmstv.txt

youtube.com/watch?v=jL4NZ913v8E
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=DRVp_cmW3Nw

ঠিক আছে।

সুতরাং, আমি yt-dlp দিয়ে ডাউনলোড করার চেষ্টা করব।
এবার আমি mp4 ফরম্যাটে সেভ করব।

sed -i ‘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’ newmstv.txt

উপরের ধাপে, আমি www সহ ইউআরএল দিয়ে প্রতিস্থাপন করেছি।
কেউ হয়তো বলতে পারেন, "সার্চ স্ট্রিং এর শুরুতে ^ ব্যবহার করলেই তো হয়!", কিন্তু ব্যক্তিগতভাবে আমি মাঝখান থেকে স্ট্রিং প্রতিস্থাপন করা পছন্দ করি কারণ এতে পুনরাবৃত্তিযোগ্যতা বেশি বলে মনে হয়।

এছাড়াও, যেহেতু / আছে, তাই sed এ বিভাজক হিসেবে | ব্যবহার করছি। | না হলেও চলে।

এবং তারপর, এটিকে .sh ফরম্যাটে নামকরণ করা যাক।

mv newmstv.txt ytdl.sh

vi ytdl.sh

এবং #!/bin/bash যোগ করুন।

এটিকে এক্সিকিউশন পারমিশন দেওয়া যাক।

chmod +x ./ytdl.sh

(এখানে, আমি হঠাৎ ভাবলাম "আমাকে ./ দিয়ে করতে হবে!" এবং এখন তা করছি। এটি ছাড়ালেও কোনো পরিবর্তন হয় না, কিন্তু এটি না লাগালে একজন পুরুষ হিসেবে অযোগ্য।)

এরপর, এটি এক্সিকিউট করলেই ঠিক আছে।

উল্লেখ্য, প্রথম grep ধাপেই ইউআরএল স্ট্রিংটি সুন্দরভাবে বের করার একটি পদ্ধতি অবশ্যই আছে। আমি এখনো খুব আনাড়ি, তাই আমাকে ক্ষমা করবেন। কেন এমন হচ্ছে তা আমি এখনো তদন্ত করিনি, তাই আমি মনে করি আমি উল্টো আরও জটিল কাজ করছি, তবে এটি বিভিন্ন কমান্ড টাইপ করে মজা করার একটি পর্ব।

শেষ।