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