আমার কাছে নিম্নলিখিত কোড রয়েছে যা প্যাটার্ন সহ 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]}'। এটি দক্ষ নয়, সুতরাং এটি কেবল একটি ইঙ্গিত, কোনও সমাধান নয়।