मैं sed
कुछ अभिव्यक्ति के अनुसार फ़िल्टर मिलान लाइनें कैसे बना सकता हूं , लेकिन गैर-मिलान लाइनों को अनदेखा करें, बजाय उन्हें प्रिंट करने के?
एक वास्तविक उदाहरण के रूप में, मैं scalac
फाइलों के एक सेट पर (स्काला कंपाइलर) चलाना चाहता हूं , और इसके -verbose
आउटपुट से .class
बनाई गई फाइलें पढ़ता हूं । scalac -verbose
संदेशों का एक गुच्छा आउटपुट करता है, लेकिन हम केवल फॉर्म के इच्छुक हैं [wrote some-class-name.class]
। वर्तमान में मैं यह कर रहा हूं ( |&
अगले कार्यक्रम के लिए स्टडर को पाइप करने का 4.0 तरीका है):
$ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/'
यह उन संदेशों से फ़ाइल नामों को निकालेगा जिसमें हम रुचि रखते हैं, लेकिन अन्य सभी संदेशों को अपरिवर्तित से गुजरने देंगे! बेशक हम इसके बजाय कर सकते हैं:
$ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' |
sed 's/^\[wrote \(.*\.class\)\]$/\1/'
जो काम करता है लेकिन वास्तविक समस्या के आसपास जाने में बहुत पसंद करता है, जो sed
कि इनपुट से गैर-मिलान लाइनों को अनदेखा करने का निर्देश है। तो हम इसे कैसे करते हैं?