फ़ाइल (टैब और रिक्त स्थान सहित) से रिक्त लाइनें कैसे निकालें?


23

मैं एक फाइल से सभी खाली लाइनों को हटाना चाहता हूं। यहां तक ​​कि अगर लाइन में स्थान या टैब शामिल हैं, तो इसे भी हटा दिया जाना चाहिए।

जवाबों:


26

सिर्फ grepगैर-रिक्त स्थान के लिए:

grep '[^[:blank:]]' < file.in > file.out

[:blank:], अंदर वर्ण श्रेणियों ( [...]), को POSIX वर्ण वर्ग कहा जाता है। कुछ ऐसे होते हैं [:alpha:], [:digit:]... [:blank:]क्षैतिज सफेद स्थान से मेल खाता है (POSIX लोकेल में, वह स्थान और टैब है, लेकिन अन्य स्थानों में अधिक हो सकता है, जैसे कि यूटीएफ 8 स्थानों में सभी यूनिकोड क्षैतिज रिक्ति वर्ण) जबकि [[:space:]]क्षैतिज और ऊर्ध्वाधर सफेद मेल खाते हैं अंतरिक्ष वर्ण ( [:blank:]ऊर्ध्वाधर टैब जैसी अतिरिक्त चीजें, प्रपत्र फ़ीड ...)।

grep '[:blank:]'

लाइनों है कि कोई भी वर्ण हो जाएंगे :, b, l, a, nया k। चरित्र वर्ग केवल सेट के भीतर [...]और ^भीतर ही पहचाने जाते हैं [...]। तो [^[:blank:]]किसी भी चरित्र का मतलब है, लेकिन खाली।


1
क्या $पंक्ति के अंत के लिए भी होना चाहिए ?
— माइकल डुरंट


1
@MichaelDurrant। [^[:blank:]]$केवल एक गैर-रिक्त में समाप्त होने वाली रेखाओं से मेल खाएगा। हम ऐसी लाइनें चाहते हैं जिनमें कहीं भी
— स्टीफन चेज़लस

@StephaneChazelas मैंने grep की कोशिश की [: blank:] SOURCEFILE यहां तक ​​कि यह कमांड भी काम कर रहा है। मैं समझता हूं कि [] चरित्र वर्ग के लिए है क्या आप मुझे इस पर कुछ विचार दे सकते हैं कि यह कैसे काम करता है? स्निपेट: रिक्त: मेरे लिए नया है।
— जमशेद अंसारी user3000272

क्या कोई ऐसे मामले हैं जहां grep -E '\S'काम नहीं करेगा?
— terdon

21

यहाँ एक awkसमाधान है:

$ awk NF file

के साथ awk, NFकेवल गैर-रिक्त लाइनों पर सेट करें। जब यह स्थिति मेल खाती है, तो awkडिफ़ॉल्ट कार्रवाई जो printपूरी लाइन को प्रिंट करेगी।


नीट, यह व्हाट्सएप के साथ लाइनों को भी हटाता है।
— वारबकी

7

कैसा रहेगा:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

या

sed -e '/^[[:blank:]]*$/d' source_file > newfile

अर्थात

प्रत्येक पंक्ति के लिए, विकल्प:

  • अगर यह शुरू होता है (" ^")
  • रिक्त स्थान या टैब (" [[:blank:]]") के साथ शून्य या अधिक बार (" *")
  • और फिर लाइन का अंत है (" $")

अधिक जानकारी :: रिक्त :: http://www.zytrax.com/tech/web/regex.htm#special पर अन्य विशेष वर्ण


4
[[:space:]]टैब शामिल हैं। यदि यह आपके रेगेक्स विफल नहीं होता अगर एक स्थान एक टैब का पालन करता है।
— जोर्डनम

wctype(3)और isalpha(3)manpages वर्णन चरित्र वर्गों क्या से मेल खाएगी।
— जोर्डनम

आप पहले वाले को हटाना चाहते हैं जो सवाल का जवाब नहीं देता।
— स्टीफन चेजलस

@MichaelDurrant क्या आप कृपया [[: blank:]] के बारे में कुछ लिख सकते हैं?
— जमशेद अंसारी user3000272

[[: रिक्त ::]] के लिए जानकारी जोड़ी गई। स्टीफन, पहला काम क्यों नहीं करता है? मैंने सोचा कि // अंत में कुछ भी नहीं के बिना लाइन की जगह लेगा।
— माइकल डुरंट

4

आप sedरिक्त लाइनों को हटाने के लिए कमांड का उपयोग कर सकते हैं :

sed '/^$/d' in > out

यह कमांड "" में फ़ाइल से सभी खाली लाइनों को हटा देती है


विशेष रूप से अनुरोध के अनुसार, केवल स्थान और टैब वाली रेखाओं को हटाता नहीं है।
— dave_thompson_085

3

ऐसा लगता है कि मैंने पाया है कि एक तेज नहीं है, लेकिन आखिरी में अजीब है:

| xargs -L1


1
अच्छा एक है, लेकिन यह अधिक है: प्रमुख स्थानों और टैब को भी हटा दें।
— जूलियट

ओह, यह और भी अधिक सक्षम पाया गया है? - अच्छा लगा! ; -प
— पूय जूल

1
और यह लाइनों को काट देती है (1024 वर्णों पर डिफ़ॉल्ट) manpages देखें: linux.die.net/man/1/xargs
— jringoot

मैं उस सरल उपकरण के साथ प्यार में गहरा पड़ रहा हूँ !!! 11)
— जूल

0

पूर्व- प्रयास करें :

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


0

निम्नलिखित आदेश का उपयोग करें:

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

यह भी देखें:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.