इस के बारे में एक डुप्लिकेट है : इसी तरह के शब्द हैं जैसे कि https://unix.stackexchange.com/questions/76061/can-sed-remove-double-newline-characters या https: // stackoverflow-questions/27510462 / How-can-i-i-remove-double-line-break-with-sed - लोकप्रिय पहले पर, हालांकि मूल प्रश्न यकीनन मेरे जैसा ही है, इसका स्वीकृत और सबसे अपवित्र प्रश्न सभी खाली लाइनों को हटाता है, न कि केवल "जब वहाँ 2 या अधिक एक साथ हैं "जैसे सवाल पूछा गया। कुछ टिप्पणियों की शिकायत है कि उत्तर और अन्य लोग इस तरह से व्यवहार करते हैं, लेकिन कोई भी उत्तर एक भी खाली रेखा को छोड़ने के लिए नहीं दिया जाता है। कुछ अन्य उत्तर पूरी तरह से हटाने के बजाय एक खाली लाइन (निचोड़) में डुप्लिकेट खाली लाइनों को बदल देते हैं।
मैं वापस खाली लाइनों को हटाने के लिए एक स्क्रिप्ट करने योग्य तरीके की तलाश कर रहा हूं, लेकिन वहां खाली लाइनों को छोड़ दें।
मैं स्वचालित रूप से .srt
(उपशीर्षक) फ़ाइलों को साफ करने के लिए देख रहा हूँ । इस प्रारूप में सबटाइटल सेक्शन (समय की किसी विशेष राशि पर प्रदर्शित करने के लिए) के बीच नई-नई पंक्तियों की आवश्यकता होती है। आमतौर पर, यदि 2 लाइनें एक बार में प्रदर्शित होनी हैं, तो उपशीर्षक लेखक में सिर्फ 2 लाइनें हैं। एक और शैली है जिसे कुछ लेखक प्रदर्शित करने के लिए लाइनों के बीच 2 खाली लाइनें रखने का उपयोग करते हैं। मेरे डिवाइस पर, यह केवल पहली पंक्ति को प्रदर्शित करने का प्रभाव है, और संभवतः टीवी से दूसरी पंक्ति को प्रस्तुत करना है।
इसलिए, मैं इसे बदलना चाहूंगा:
1
00:00:01,800 --> 00:00:03,802
First line is here
Second line is here
2
...
इस मामले में:
1
00:00:01,800 --> 00:00:03,802
First line is here
Second line is here
2
...
ऐसा नहीं है कि इसे संभवतः अलग तरीके से संभालने की आवश्यकता है, लेकिन फ़ाइल प्रारूप में फ़ाइल के निचले भाग में एक खाली पंक्ति होनी चाहिए, जिसे वहां छोड़ दिया जाना चाहिए।
मैं चाहता हूं कि यह संभवत: पहले ट्रेलिंग व्हाट्सएप को हटाकर काम करे, फिर केवल उन सभी खाली लाइनों को हटा दे जो एक और खाली लाइन को छूती हैं। मैं नहीं चाहता कि इसे ए के बाकी फॉर्मेट के आधार पर एंकर किया जाए .srt
, जैसे कि नंबर वाले सेक्शंस के बीच कितनी लाइनें हैं। (मैंने सोचा है कि सभी खाली लाइनों को हटाया जा सकता है, और केवल संख्यात्मक वर्णों वाली लाइनों पर वापस नई लाइनें जोड़ी जा सकती हैं, लेकिन मैं इसे वास्तविक .srt
प्रारूप की अनदेखी करते हुए उससे अधिक सामान्य रखने की उम्मीद कर रहा हूं ।)
इसके अलावा, अगर किसी कारण .srt
से पाठ की 2 से अधिक लाइनें हैं, तो मैं चाहूंगा कि इसे इस तरह से छोड़ दिया जाए।
तो, शायद कुछ की तर्ज पर:
cat some.srt | sed 's/[ \t]*$//' | SOMETHING_ELSE
मैं एक पसंद करते हैं bash
, sed
या awk
एक से अधिक समाधान perl
एक। यदि मैं सही समझता हूं, तो मुझे लगता है कि बहु-स्तरीय होने के awk
बजाय इसे लागू करना आसान होगा sed
।
sed
स्क्रिप्ट काम करेगीsed -r ':a;N;${:b;s/\n[[:blank:]]+\n/\n\n/;tb;s/\n{3,}/\n/g;s/\n+$/\n/};ba'
।