यदि कोई मैच नहीं मिला , तो sed के साथ रेगेक्स की खोज करें, और माचिस को हाइलाइट करें , या बाहर निकलें कोड (5) वापस करें :
यह input.txt है:
hello there
my dear old friend
a lot of things
we'll pass along the end
यहाँ सभी + हाइलाइट मैच + रिटर्न एक्जिट कोड प्रिंट करने का मेरा कार्य है:
highlight()
{
pattern=$1
shift
sed '/'"${pattern}"'/,${s//\x1b[32m&\x1b[0m/g;b};$q5' "$@"
}
$ हाइलाइट "lo \ _ end" input.txt || इको-ई "\ n * कोई मैच नहीं मिला *"
HEL लो वहाँ
मेरे प्रिय पुराने शुक्र अंत
एक लो चीजों की टी
हम एक पास भेज देंगे लो एनजी अंत
जब कोई मिलान नहीं होता है, तो यह निकास कोड (5) लौटाएगा। आप इसे बिल्ली और पाइप के साथ उपयोग कर सकते हैं | भी:
$ बिल्ली input.txt | हाइलाइट करें "हॉट \" और "|| इको-ई "\ n * कोई मैच नहीं मिला *"
नमस्ते वहाँ
मेरे प्यारे पुराने दोस्त
बहुत सारी चीजें
हम अंत तक साथ देंगे
* कोई मेल नहीं मिला *
Https://unix.stackexchange.com/a/405725/43233 के लिए धन्यवाद - मैं इसका इस्तेमाल कर रहा हूँ + sed विकल्प छोड़ें।
sed
सबसे निश्चित रूप से एक निकास स्थिति है, यह सिर्फ वही नहीं करता है जो आपको यहां चाहिए। यदिsed
आदेश विफल हो जाता है, उदाहरण के लिए, यदि आप इसे किसी ऐसी फ़ाइल पर चलाने का प्रयास करते हैं, जिसमें आपके पास लिखने की पहुंच नहीं है या जो मौजूद नहीं है,sed
तो गैर-0 से बाहर निकलने की स्थिति से बाहर निकल जाएगी। बाहर निकलने की स्थिति केवल यह बताती है किsed
क्या आपने जो करने के लिए कहा था उसे करने में कामयाब रहे, औरecho "foo.bar" | sed 's/pop.*$//'
सही ढंग से निष्पादित किया गया था। इसने सभी लाइनों को हटा दियाpop
। यह नहीं था कि इस तरह की लाइनें अप्रासंगिक नहीं थीं, फिर भी कमांड ने काम किया।