मैं एक फाइल से सभी खाली लाइनों को हटाना चाहता हूं। यहां तक कि अगर लाइन में स्थान या टैब शामिल हैं, तो इसे भी हटा दिया जाना चाहिए।
मैं एक फाइल से सभी खाली लाइनों को हटाना चाहता हूं। यहां तक कि अगर लाइन में स्थान या टैब शामिल हैं, तो इसे भी हटा दिया जाना चाहिए।
जवाबों:
सिर्फ grep
गैर-रिक्त स्थान के लिए:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, अंदर वर्ण श्रेणियों ( [...]
), को POSIX वर्ण वर्ग कहा जाता है। कुछ ऐसे होते हैं [:alpha:]
, [:digit:]
... [:blank:]
क्षैतिज सफेद स्थान से मेल खाता है (POSIX लोकेल में, वह स्थान और टैब है, लेकिन अन्य स्थानों में अधिक हो सकता है, जैसे कि यूटीएफ 8 स्थानों में सभी यूनिकोड क्षैतिज रिक्ति वर्ण) जबकि [[:space:]]
क्षैतिज और ऊर्ध्वाधर सफेद मेल खाते हैं अंतरिक्ष वर्ण ( [:blank:]
ऊर्ध्वाधर टैब जैसी अतिरिक्त चीजें, प्रपत्र फ़ीड ...)।
grep '[:blank:]'
लाइनों है कि कोई भी वर्ण हो जाएंगे :
, b
, l
, a
, n
या k
। चरित्र वर्ग केवल सेट के भीतर [...]
और ^
भीतर ही पहचाने जाते हैं [...]
। तो [^[:blank:]]
किसी भी चरित्र का मतलब है, लेकिन खाली।
[^[:blank:]]$
केवल एक गैर-रिक्त में समाप्त होने वाली रेखाओं से मेल खाएगा। हम ऐसी लाइनें चाहते हैं जिनमें कहीं भी
grep -E '\S'
काम नहीं करेगा?
कैसा रहेगा:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
या
sed -e '/^[[:blank:]]*$/d' source_file > newfile
अर्थात
प्रत्येक पंक्ति के लिए, विकल्प:
^
")[[:blank:]]
") के साथ शून्य या अधिक बार (" *
")$
")अधिक जानकारी :: रिक्त :: http://www.zytrax.com/tech/web/regex.htm#special पर अन्य विशेष वर्ण
[[:space:]]
टैब शामिल हैं। यदि यह आपके रेगेक्स विफल नहीं होता अगर एक स्थान एक टैब का पालन करता है।
wctype(3)
और isalpha(3)
manpages वर्णन चरित्र वर्गों क्या से मेल खाएगी।
आप sed
रिक्त लाइनों को हटाने के लिए कमांड का उपयोग कर सकते हैं :
sed '/^$/d' in > out
यह कमांड "" में फ़ाइल से सभी खाली लाइनों को हटा देती है
ऐसा लगता है कि मैंने पाया है कि एक तेज नहीं है, लेकिन आखिरी में अजीब है:
| xargs -L1
पूर्व- प्रयास करें :
ex -s +'v/\S/d' -cwq test.txt
कई फ़ाइलों के लिए (जगह में संपादित करें):
ex -s +'bufdo!v/\S/d' -cxa *.txt
नोट: :bufdo
कमांड POSIX नहीं है ।
फ़ाइल को संशोधित किए बिना (केवल मानक आउटपुट पर प्रिंट करें):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
निम्नलिखित आदेश का उपयोग करें:
grep '\S' FILE
जो रिक्त स्थान या टैब सहित सभी लाइनों को हटा देता है।
अन्यथा, रिक्त स्थान / टैब के साथ लाइनों को शामिल नहीं करना, उपयोग:
grep . FILE
उदाहरण के लिए:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
यह भी देखें:
sed
: sed का उपयोग करके खाली लाइनें हटाएंawk
: awk का उपयोग करके खाली लाइनें निकालें
$
पंक्ति के अंत के लिए भी होना चाहिए ?