Grep के माध्यम से एक पाठ फ़ाइल में खाली लाइनें निकालें


84

FILE:

hello

world

foo

bar

मैं इसमें सभी खाली नई लाइनें कैसे निकाल सकता हूं FILE?

कमांड का आउटपुट:

FILE:

hello
world
foo
bar

जवाबों:


129

grep . FILE


(और अगर आप वास्तव में इसे में sed तो करना चाहते हैं: sed -e /^$/d FILE)

(और क्या तुम सच में awk में यह तो ऐसा करने के लिए, चाहते हैं: awk /./ FILE)


1
मिठाई! अन्य आदेशों के लिए भी TY - लेकिन ऐसा लगता है कि grep मेरा नया सबसे अच्छा दोस्त है।
user191960

जीआरपी फ़ाइल मेरे लिए काम नहीं करता है। फ़ाइल सामग्री खोजने के लिए शायद grep के साथ रहना बेहतर है, और फ़ाइल सामग्री संपादित करने के लिए sed।
माइकल डिलन

7
sed -ne/./pभी काम करता है, और awk /./कम है (कार्रवाई {print}यदि अनिर्दिष्ट है) @ ghostdog74: grep '[^[:space:]]'फिर।
१२

5
उन लोगों के लिए जो समझ में नहीं आते हैं, .एक नियमित अभिव्यक्ति है जो न्यूलाइन को छोड़कर किसी भी चरित्र से मेल खाती है।
वारबैंक

3
grep . FILEदिए गए उदाहरण के साथ काम करता है, लेकिन जरूरी नहीं कि जब फ़ाइल में बाइट्स हो, तो वह चारसेट का हिस्सा न हो। उदाहरण के लिए, GNU grep 2.20 के साथ, printf "\x80\n" | grep .आउटपुट कुछ नहीं करता है।
vinc17

37

निम्नलिखित का प्रयास करें:

grep -v -e '^$'

इसका grep जैसा ही प्रभाव है। उस स्थान पर एक रिक्त रेखा के रूप में फ़ाइल को पकड़ा जाएगा।
भूतडॉग ghost४

1
"grep" किसी भी लाइन के लिए दिखता है जो पैटर्न से मेल खाता है। "।" किसी भी पात्र से मेल खाता है। "grep। FILE" कम से कम 1 वर्ण के साथ किसी भी रेखा से मेल खाता है। जबकि "grep -v" पैटर्न से मेल खाती लाइनों को बाहर करता है। ओपी ने कहा "सभी खाली नई लाइनों को हटा दें"। यदि आप बस रिक्त स्थान के साथ लाइनों को बाहर करना चाहते हैं, तो "grep -v '^ $'"। " " पूर्ववर्ती पैटर्न के शून्य या अधिक से मेल खाएगा, इस मामले में एक स्थान। यद्यपि आप अन्य व्हाट्सएप वर्णों (टैब, फॉर्म-फीड, आदि) को भी मैच और बाहर करना पसंद कर सकते हैं।
श्री Mr.

3
इस पद्धति ने मुझे "grep। FILE" की तुलना में अधिक आसानी से एकाधिक बहिष्कृत करने की अनुमति दी। उदाहरण के लिए, मैं एक उलझन फ़ाइल को देख रहा था और सभी टिप्पणी की गई लाइनों और सभी खाली लाइनों को बाहर करना चाहता था। इसलिए मैंने "grep -v -e '#' -e '^ $' squid.conf" का इस्तेमाल किया। एक इलाज का काम किया।
बेन के

2
यह एक 'ग्रीप' की तुलना में बहुत तेज है। फ़ाइल '। यह रेक्स को सत्यापित करने के अधिक जटिल कार्यों के कारण है। '' जैसे ही ^ $ से मेल नहीं खाता है।
atdouard लोपेज़

2
grep -v -e '^$'हमेशा काम करता है, जो कि मामला नहीं है grep .। उदाहरण के लिए, जीएनयू जीआरपी २.२० के साथ, गैर-खाली लाइन printf "\x80\n" | grep .को printf "\x80\n" | grep -v '^$'आउटपुट करते हुए, कुछ भी आउटपुट नहीं करता है।
vinc17

11
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar

उद्धरण की आवश्यकता नहीं है। इस ट्रिक में पाया जाता है awk1line.txt- फिर फिर से, इसलिए सबसे
अजीब

2
इसके सिर्फ उद्धरण देने के लिए मेरा अच्छा अभ्यास है, क्योंकि आप इसे शेल से चला रहे हैं .. समग्र अजीब बयानों के लिए, आपको अभी भी उद्धरण डालना होगा। तो क्यों न इस आदत पर खेती करें।
ghostdog74

यह कैसे काम करता की व्याख्या: stackoverflow.com/questions/23544804/...
wisbucky

9

यहां एक समाधान है जो उन सभी लाइनों को हटा देता है जो या तो रिक्त हैं या जिनमें केवल अंतरिक्ष वर्ण हैं:

grep -v '^[[:space:]]*$' foo.txt

2

इसे इस्तेमाल करे: sed -i '/^[ \t]*$/d' file-name

यह सभी रिक्त लाइनों को हटा देगा जिसमें कोई भी नहीं होगा। फ़ाइल में सफेद स्थान (स्थान या टैब) अर्थात (0 या अधिक)।

नोट: वर्ग ब्रैकेट के अंदर 't' के बाद 'स्पेस' है।

संशोधक -iअपडेट की गई सामग्री को फ़ाइल में वापस लिखने के लिए बाध्य करेगा। इस ध्वज के बिना आप देख सकते हैं कि स्क्रीन पर खाली लाइनें हटा दी गईं लेकिन वास्तविक फ़ाइल प्रभावित नहीं होगी।


1

grep '^..' my_file

उदाहरण

THIS

IS

THE

FILE

EOF_MYFILE

यह आउटपुट के रूप में केवल कम से कम 2 वर्णों के साथ लाइनें देता है।

THIS
IS
THE
FILE
EOF_MYFILE

grep '^' my_fileआउटपुट के साथ परिणाम भी देखें

THIS

IS

THE

FILE

EOF_MYFILE

और grep '^.' my_fileआउटपुट के साथ भी

THIS
IS
THE
FILE
EOF_MYFILE

1

यदि खाली लाइनों को हटाने का अर्थ है किसी भी स्थान सहित लाइनें, उपयोग करें:

grep '\S' FILE

उदाहरण के लिए:

$  printf "line1\n\nline2\n \nline3\n\t\nline4\n" > FILE
$  cat -v FILE
line1

line2

line3

line4
$  grep '\S' FILE
line1
line2
line3
line4
$  grep . FILE
line1
line2

line3

line4

यह सभी देखें:


0

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

ex -s +'v/\S/d' -cwq test.txt

कई फ़ाइलों के लिए (जगह में संपादित करें):

ex -s +'bufdo!v/\S/d' -cxa *.txt

फ़ाइल को संशोधित किए बिना (मानक आउटपुट पर सिर्फ प्रिंट करें):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin

0

पर्ल ओवरकिल हो सकता है, लेकिन यह भी काम करता है।

सभी लाइनों को हटाता है जो पूरी तरह से खाली हैं:

perl -ne 'print if /./' file

उन सभी पंक्तियों को हटा देता है जो पूरी तरह से रिक्त हैं, या केवल व्हॉट्सएप हैं:

perl -ne 'print if ! /^\s*$/' file

भिन्नता जो मूल को संपादित करती है और एक .bak फ़ाइल बनाती है:

perl -i.bak -ne 'print if ! /^\s*$/' file

0

यदि आप जानना चाहते हैं कि कोड की कुल पंक्तियाँ आपके Xcode प्रोजेक्ट में क्या हैं और आप प्रत्येक स्विफ्ट फ़ाइल की गिनती को सूचीबद्ध करने में रुचि नहीं रखते हैं तो यह आपको उत्तर देगा। यह बिना किसी कोड के लाइनों को हटाता है और उन पंक्तियों को हटाता है जो टिप्पणी के साथ उपसर्ग करती हैं//

इसे अपने Xcode प्रोजेक्ट के रूट स्तर पर चलाएं।

find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l

आप अपने कोड में टिप्पणी ब्लॉक के साथ शुरुआत है, तो /*और के साथ समाप्त होने */जैसे:

/*
 This is an comment block 
*/

फिर ये गिनती में शामिल हो जाएंगे। (बहुत कठिन)।


0

सरलतम उत्तर -----------------------------------------

[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
[root@node1 ~]#
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.