मैं 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कि इनपुट से गैर-मिलान लाइनों को अनदेखा करने का निर्देश है। तो हम इसे कैसे करते हैं?