मैं कुछ फाइलों से लाइनें निकालने की कोशिश कर रहा हूं जो # से शुरू नहीं होती हैं (टिप्पणी की गई)। मैं एक फ़ाइल के माध्यम से कैसे चलाऊंगा, इसके सामने # के साथ सब कुछ अनदेखा कर दूंगा, लेकिन प्रत्येक पंक्ति को कॉपी करें जो एक अलग फ़ाइल में # से शुरू नहीं होती है।

धन्यवाद

1
Danny 25 अगस्त 2011, 21:33

3 जवाब

सबसे बढ़िया उत्तर

सरल: grep -v '^[[:space:]]*#' input.txt > output.txt

3
pulsar 25 अगस्त 2011, 21:43
यह एक अच्छी तरह से काम करता है, मैंने इस्तेमाल किया: बिल्ली file1.txt | sed -e '/\s*\#/d' > file2.txt
 – 
Danny
26 अगस्त 2011, 00:38
@ डैनी, जो हैश के साथ किसी भी लाइन को हटा देगा, जिसमें एक लाइन भी शामिल है: echo "this line # has a hash"। आपको अपने पैटर्न को लाइन की शुरुआत में एंकर करना होगा। इसके अलावा, बिल्ली का बेकार उपयोग। इसे आजमाएं: sed -e '/^\s*#/d' file1.txt > file2.txt
 – 
glenn jackman
26 अगस्त 2011, 01:37
@ ग्लेन, यह तब तक काम करता है जब तक हैश मार्क से पहले कोई सफेद जगह न हो। अगर किसी चीज़ में टैब किया गया है और उस पर टिप्पणी की गई है, तो वह उस लाइन को नहीं हटाती है। कोई विचार?
 – 
Danny
26 अगस्त 2011, 21:34
@डैनी, आप grep का कौन सा संस्करण चला रहे हैं: grep --version
 – 
glenn jackman
26 अगस्त 2011, 22:32
@ डैनी, पता नहीं, मेरे लिए काम करता है: लाइन की शुरुआत में रिक्त स्थान या टैब वाली रेखाएं हैश के बाद हटा दी जाती हैं। अपने इनपुट को od -c के माध्यम से चलाने का प्रयास करें यह देखने के लिए कि आपत्तिजनक वर्ण क्या हैं कि [[:space:]]* रेगेक्स मेल नहीं खाता है।
 – 
glenn jackman
27 अगस्त 2011, 00:30

यह मानता है कि आप यूनिक्स/लिनक्स शेल और कमांड के उपलब्ध यूनिक्स टूलकिट का उपयोग कर रहे हैं और आप मूल फ़ाइल की एक प्रति रखना चाहते हैं।

cp file file.orig
mv file file.fix
sed '/^[      ]*#/d' file.fix > file
rm file.fix

या यदि आपके पास एक अच्छा चमकदार नया जीएनयू sed है जिसे सभी के रूप में संक्षेपित किया गया है

cp file file.orig
sed -i '/^[      ]*#/d' file

दोनों ही मामलों में, sed कमांड में regexp का मतलब [spaceCharTabChar] है तो आप कह रहे हैं, किसी भी लाइन को हटा दें जो (वैकल्पिक स्थान या टैब वर्ण) # से शुरू होती है, लेकिन बाकी सब कुछ प्रिंट करें।

आशा है कि ये आपकी मदद करेगा।

1
shellter 25 अगस्त 2011, 21:40
grep -v '^/[ ]*#/' file थोड़ा आसान है।
 – 
Keith Thompson
25 अगस्त 2011, 21:45
grep -v भी काम करता है। साथ ही, कई seds @pulsar द्वारा समर्थित [[:space:]] सिंटैक्स का समर्थन करते हैं, इसलिए पहले इसे प्रतिस्थापित करने का प्रयास करें।
 – 
shellter
25 अगस्त 2011, 21:56
grep -v ^\# file > newfile
grep -v ^\# file | grep -v ^$ > newfile

फैंसी रेगेक्स नहीं, लेकिन मैं जूनियर एडमिन को यह विधि प्रदान करता हूं क्योंकि यह पाइप और पुनर्निर्देशन को समझने में मदद करता है।

1
glenn jackman 26 अगस्त 2011, 01:40