গ্রেপ-সি <নুম> এ আওক একিভ্যালেন্ট


0

আমি প্রতিটি লাইনের চারপাশে প্রসঙ্গের পাঁচটি লাইন মুদ্রণ করতে চাই যা "ফু" সাথে মেলে তবে "ফুবার" নয়।

আমি সহজেই ম্যাচটি খুব সহজেই করতে পারি <output> | awk '/foo/ && !/foobar/'তবে কীভাবে প্রসঙ্গে প্রদর্শিত <output> | grep -C 5 'foo'হবে তা আমি বুঝতে পারি না।

আমি উপরের যৌগিক শর্তসাপেক্ষে একটি ওয়ানলাইনারের সন্ধানের জন্য স্থির করব grep

উত্তর:


0

আমার কাছে এমন একটি উত্তর আমি পেয়েছি যা আমি অনুরূপ একটি প্রশ্নের উত্তর দিয়েছি যা আমি আর খুঁজে পাচ্ছি না:

awk -v context=5 '
BEGIN{ held = -1 }
{ for(i = context;i>0;i--)lb[i] = lb[i-1];
  lb[0] = sprintf("%s:%d:%s",FILENAME,NR,$0);
  held++;
}
/foo/ && !/foobar/{
 if(held>context)held = context;
 for(i = held;i>0;i--)print lb[i]
 held = -1;
 max = NR+context
}
{ if(NR<=max){ print lb[0]; held = -1 }
  else{ if(held==context)print "--" }
}
'

যদি আপনার গ্রেপ gnu হয় এবং পার্ল পিসিআর রেজেক্সপ্স করে, আপনি যা করতে পারেন তা করতে পারেন:

grep -P '(?!foobar)foo'

যার অর্থ সামনের দিকে তাকান এবং ফুবারের সাথে মেলে না, তার পরে ফুও হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.