Grep -C <num> को eqivalent


0

मैं प्रत्येक पंक्ति के चारों ओर संदर्भ की 5 पंक्तियों को प्रिंट करना चाहता हूं जो "फू" से मेल खाती है, लेकिन "फोब्बर" नहीं।

मैं मैच काफी आसानी से <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 "--" }
}
'

यदि आपका grep ग्नू है और perl pcre regexps करता है , तो आप यह कर सकते हैं:

grep -P '(?!foobar)foo'

जिसका अर्थ है आगे देखें और फू से मेल न खाएं, इसके बाद फू।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.