पुनः: लगातार टेक्स्ट से यूट्यूब यूआरएल निकालने के लिए रेगुलर एक्सप्रेशन ग्रेप नोट्स और फिर yt-dlp करना ~?(प्रश्न चिह्न) एस्केप नहीं किया जा सकता!? का अध्याय~
नमस्ते, मैं अक्षम हूँ।
यह एक लेख का शीर्षक है जो अक्षम लगता है, मुझे नहीं पता कि यह किस मंगा या एनीमे से है।
पिछला लेख।
https://soulminingrig.com/blog/連続したテキストからyoutube-url抜くだけでの正規表現grep/
उस समय, मैं अन्य वेब स्क्रैपिंग स्क्रिप्ट लिख रहा था और नींद से मर रहा था, सुबह लगभग 4 बजे, इसलिए कमांड और टेक्स्ट दोनों गड़बड़ थे।
मैं इसे फिर से संक्षेप में प्रस्तुत करूँगा।
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
करीब से देखने पर, अंतिम स्ट्रिंग (11वां वर्ण) W7G-QtbTWg का एक वर्ण गायब हो गया है और एक बैकस्लैश बन गया है! बेशक, इस तरह से इसे सामान्य URL सेव URL के रूप में आउटपुट नहीं किया जा सकता है।
youtube.com/watch?v=DRVp_cmW3Nw
youtube.com/watch?v=DRVp_cmW3N\
सौभाग्य से, सही ढंग से प्रदर्शित होने वाले 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 कमांड के साथ एक स्ट्रिंग की गणना की जाती है, तो इसमें लाइन की संख्या भी शामिल होती है, और टच आदि के साथ बनाई गई एक खाली फ़ाइल भी 1 दिखाती है। इसलिए, इसका उपयोग करते समय, आपको लाइन की संख्या को घटाना होगा।
फिर मिलेंगे।
धन्यवाद।