लकीर बनाने के लिए कैसे लाइनों से मेल नहीं खाते?


8

निम्नलिखित उदाहरण में, sedरेखाएं एक aa से शुरू होती हैं cऔर उस रेखा के पहले वर्ण को प्रिंट करती हैं ( aया c):

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

हालाँकि, जो लाइनें पैटर्न से मेल नहीं खाती हैं वे भी प्रिंट आउट हैं। मैं sedउन पंक्तियों को कैसे छोड़ूं जो पैटर्न से मेल नहीं खाती हैं? मैं इसके साथ संयोजन करके वांछित प्रभाव प्राप्त कर सकता हूं grep(निम्नानुसार) लेकिन मैं यह जानना चाहूंगा कि क्या sedवह "खुद से" प्राप्त कर सकता है।

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'

output:
a
c

इससे कोई फर्क नहीं पड़ता कि आप वास्तव में क्या जानना चाहते थे, लेकिन आपका पैटर्न ^ से शुरू होना चाहिए, इसलिए यह लाइन की शुरुआत के लिए लंगर डाला गया है। जब तक इसे कोडित किया जाता है, तब तक यह पंक्ति में कहीं भी एक या सी से मेल खाएगा क्योंकि यह अंतिम वर्ण नहीं है।
जो

जवाबों:


12

no-printध्वज का उपयोग करें ( -n) और स्पष्ट रूप से सफल स्थानापन्न कमांड प्रिंट करें ( s///p):

 sed -n 's/\(a\|c\)./\1/p'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.