लगातार टेक्स्ट से यूट्यूब यूआरएल निकालने के लिए रेगुलर एक्सप्रेशन ग्रेप मेमो, और फिर yt-dlp का उपयोग

6 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\"

इस लगातार स्ट्रिंग में से, मैं केवल YouTube URL निकालना चाहता हूँ।

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

चूंकि यह ऐसा दिखता है, तो आइए सही URL के अक्षरों की गणना करने का प्रयास करें।

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

यह 32 वर्ण लंबा लगता है।

इसलिए, मैं केवल 32 वर्णों वाले को निकालूँगा।

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

यह ऐसा लिखा गया है जैसे यह सफल रहा, लेकिन जब मैंने दोबारा जाँच की, तो यह काम नहीं किया। जब मैंने 32 को 31 में बदला तो यह काम कर गया। ऐसा क्यों है? कृपया कोई मुझे बताए।

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' वाले URL से बदल रहा हूँ।
कुछ लोग कह सकते हैं, 'खोज स्ट्रिंग के लिए पंक्ति की शुरुआत में '^' का उपयोग क्यों नहीं करते!', लेकिन व्यक्तिगत रूप से, मुझे यह तरीका पसंद है क्योंकि बीच से एक स्ट्रिंग से बदलना उच्च प्रतिलिपि प्रस्तुत करने योग्यता रखता है।

साथ ही, चूंकि '/' शामिल है, मैं sed के साथ सीमांकन के लिए '|' का उपयोग कर रहा हूँ। हालांकि, यह '|' होना ज़रूरी नहीं है।

और फिर, आइए नाम को '.sh' प्रारूप में बदलें।

mv newmstv.txt ytdl.sh

vi ytdl.sh

फिर, #!/bin/bash जोड़ें।

आइए निष्पादन अनुमति दें।

chmod +x ./ytdl.sh

(यहाँ, वह आदमी जिसने अचानक सोचा 'मुझे इसे './' के साथ करना चाहिए' और अब ऐसा करता है। (इसके बिना भी कोई फर्क नहीं पड़ता, लेकिन) यदि आप इसे शामिल नहीं करते हैं, तो आप एक आदमी के रूप में अयोग्य हैं।)

उसके बाद, बस इसे निष्पादित करें, और यह ठीक है।

वैसे, grep के प्रारंभिक चरण में URL स्ट्रिंग को पूरी तरह से निकालने का एक तरीका ज़रूर होगा। मैं अभी भी बहुत नौसिखिया हूँ, इसलिए कृपया मुझे क्षमा करें। मैंने अभी तक यह भी नहीं देखा है कि ऐसा क्यों है, इसलिए मुझे लगता है कि मैं चीजों को घुमा-फिरा कर कर रहा हूँ, लेकिन यह विभिन्न कमांड टाइप करके मज़े करने का एक सत्र है।

समाप्त।