"#" या "?" से शुरू न होने वाली लाइनों को कैसे टालें?


78

मैं smb.confकेवल उन पंक्तियों को देखना और देखना चाहता हूं जिन पर कोई टिप्पणी नहीं की गई है।


1
testparmइस प्रदर्शन डिफ़ॉल्ट मानों को भी बेहतर करें।
एफ। होरी

@ F.Hauri धन्यवाद। यह भी काम कर रहा है। लेकिन यह भी है कुछ अनावश्यक (मेरे मामले में) जानकारी है, जो भी grepped किया जाना चाहिए ... उत्पादन
डेनिस


जवाबों:


125
grep "^[^#;]" smb.conf

पहला ^लाइन की शुरुआत को संदर्भित करता है, इसलिए पहले चरित्र के बाद शुरू होने वाली टिप्पणियों के साथ लाइनों को बाहर नहीं किया जाएगा। [^#;]किसी भी चरित्र का मतलब है जो #या नहीं है ;

दूसरे शब्दों में, यह उन रेखाओं की रिपोर्ट करता है जो किसी भी चरित्र के अलावा #और से शुरू होते हैं ;। यह उन लाइनों की रिपोर्टिंग के समान नहीं है, जिनके साथ शुरू नहीं होता है #और ;(जिसके लिए आप इसका उपयोग करेंगे grep -v '^[#;]') इसमें खाली लाइनें भी शामिल हैं, लेकिन यह शायद इस मामले में बेहतर है क्योंकि मुझे संदेह है कि आप खाली लाइनों की परवाह करते हैं।

यदि आप प्रमुख रिक्त वर्णों को अनदेखा करना चाहते हैं, तो आप इसे निम्न में बदल सकते हैं:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

या

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

या

awk '$1 ~ /^[^;#]/' smb.conf

सही जवाब है: cat /etc/samba/smb.conf | grep ^[^#\;]लेकिन वैसे भी धन्यवाद
डेनिस

हाँ, या आप "उद्धरण" का उपयोग कर सकते हैं; मैंने उसे बाद में संपादित किया।
गोल्डीलॉक्स

7
@denys तुम गलत हो: अपने से बुरे नहीं में सोने के पत्तों की प्रतिक्रिया। .1 कृपया cat ...| वाक्य रचना का उपयोग करने से बचें । .2 खाली लाइनों और केवल स्थान युक्त रेखाओं को चाबुक के लिए, शायद टिप्पणियों के साथ यू इसका उपयोग कर सकते हैं:grep -v "^ *\(#.*\|\)$" < smb.conf
एफ। होरी

7
@EmanuelBerg यह एक बेकार कांटा है। cat file | grep "blah"implie एक के माध्यम से दो बाइनरी चल फीफो है, जबकि grep "blah" <fileवास्तव में ऐसा ही करने और बाँध file स्वाभाविक रूप से ग्रेप के लिए STDIN[बैश] बेकार बिल्ली किसी भी खोज इंजन के माध्यम से खोज का एक पूर्ण विशेषताओं वाला विषय है! -> blog.sanctum.geek.nz/useless-use-of-cat ... नमूना के लिए
एफ। होरी

2
यह बिल्कुल वैसा ही नहीं करता है । यह 2 प्रक्रियाएँ और एक पाइप बनाता है जहाँ 1 प्रक्रिया पर्याप्त है। @ F.Hauri की अंतिम टिप्पणी में दिए गए लिंक को पढ़ें।
रहमू

4

विम समाधान:

:v/^\s*[#\n]/p

मैं इस सवाल को पार कर गया जब खुद ही समाधान खोजने की कोशिश कर रहा था।


1
यह उन पंक्तियों को भी हटा देगा जो रिक्त स्थान से शुरू होती हैं।
Kusalananda

सच। मैंने पाया कि टिप्पणियों के बीच लाइनों के रूप में कॉन्फ़िगर फ़ाइलों के लिए उपयोगी है अन्यथा आउटपुट भरें। यदि आप बल्कि खाली लाइनों को रखना चाहते हैं, तो *इसे इस +तरह बदलें :v/^\s+[#\n]/p
डेविड लॉर्ड

3

ऑलिव नड्ज के उत्तर को टटोलने का कार्य (GNU grepया संगत मानकर ) समाप्त किया जा सकता है :

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

दूसरा grep i @ nadj का लुक बेकार है, @ गोल्डीलॉक्स का जवाब पहले से ज्यादा था।
आर्केमर

1
मैं मानता हूं कि गोल्डीलॉक्स का जवाब सही था। हालाँकि, मैंने खाली लाइनों को न दिखाने के लिए भी इसे उपयोगी माना।
मोर्टन लिंड

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

जो मेरे लिए काम करता है। हैश मार्क या अर्धविराम से पहले टिप्पणी या खाली लाइनों, यहां तक ​​कि व्हाट्सएप को अनदेखा करें


2

ये उदाहरण लोगों के काम आ सकते हैं।

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

पहले grep उदाहरण में हैश प्रतीक के बाद व्हाट्सएप की किसी भी राशि के साथ शुरू होने वाली लाइनें शामिल नहीं हैं।

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

दूसरा व्हाट्सएप की किसी भी राशि के साथ शुरू होने वाली रेखाओं को रखता है और उसके बाद हैश प्रतीक या अर्धविराम।

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

यहाँ मुझे एक बेहतर मिला (GNU grepया संगत मानकर ):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

उन पंक्तियों के लिए बाहर करें #;/%<जो चौकोर कोष्ठक में होती हैं और पाइप के बाद दूसरा फ़िल्टर \s*$रिक्त लाइनों के लिए होता है।


2
टिप्पणियों के लिए किस प्रकार की फ़ाइलों का उपयोग <या /उपयोग किया जाता है? मैं बहुत सी फ़ाइल स्वरूपों को जानता हूं जहां <सब कुछ है लेकिन एक टिप्पणी है। !कभी-कभी X संसाधन फ़ाइलों की तरह उपयोग किया जाता है।
स्टीफन चेजलस

-1
grep -v '^$\|^\s*#' temp

यह बहुत बेहतर है, मैंने इसे https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-use-grep-sed से प्राप्त किया

यह GNU grepया संगत मानता है ।


यह प्रश्न भी ;एक टिप्पणी के रूप में शुरू होने वाली लाइनों पर विचार करता है जिसे हटा दिया जाना चाहिए।
Kusalananda

-2
egrep -v "^#|^$" anyfile.txt

यह कमांड टिप्पणियों और रिक्त लाइनों को छोड़कर फ़ाइल में सभी जानकारी को संक्षिप्त करने के लिए है।


2
ध्यान दें कि smb.conf भी साथ टिप्पणी;
जेफ स्कालर

-3

यह आपको उन लाइनों के बिना फ़ाइल को प्रदर्शित करना चाहिए जो इसके साथ शुरू होती हैं #: grep -v "^#" filename


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