मेरे पास निम्नलिखित कोड है जो पैटर्न के साथ लाइनों को हटा देगा banana
और इसके बाद 2 लाइनें:
sed '/banana/I,+2 d' file
अब तक सब ठीक है! लेकिन मुझे इससे पहले 2 लाइनों को हटाने की आवश्यकता है banana
, लेकिन मैं इसे "माइनस साइन" या जो कुछ भी कर सकता हूं (जो grep -v -B2 banana file
करना चाहिए या नहीं के समान है ):
teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file
sed: invalid option -- '2'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file
sed: -e expression #1, char 16: unexpected `,'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,2- d' file
sed: -e expression #1, char 17: unknown command: `-'
tac file | sed ... | tac
। : पी
sed '/banana/,+2d' file
काम भी करेगा
awk 'tolower($0)~/bandana/{print prev[!idx];print prev[idx]} {idx=!idx;prev[idx]=$0}' filein
चूंकि यह एक टिप्पणी है और एक उत्तर नहीं है (पहले से ही अन्य उत्तर हैं), मैं बहुत अधिक विस्तार में नहीं जाऊंगा, लेकिन इसके बारे में आपको हमेशा पता चलता है पिछले दो रिकॉर्ड्स प्रचलित [0] और प्रचलित [1], "सबसे ताज़े" जिस पर निर्भर करता है prev[idx]
, लेकिन हमेशा अंदर रहता है , इसलिए जब आप प्रिंट करते हैं, तो आप !idx
उस idx
क्रम में प्रिंट करते हैं । भले ही, वैकल्पिक idx
और वर्तमान रिकॉर्ड में डाल दिया prev[idx]
।
awk '{l[m=NR]=$0}/banana/{for(i=NR-2;i<=NR;i++)delete l[i]}END{for(i=1;i<=m;i++)if(i in l)print l[i]}'
:। यह कुशल नहीं है, इसलिए यह सिर्फ एक संकेत है, समाधान नहीं है।