मेरे पास निम्नलिखित कोड है जो पैटर्न के साथ लाइनों को हटा देगा 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]}':। यह कुशल नहीं है, इसलिए यह सिर्फ एक संकेत है, समाधान नहीं है।