Aqui está um perl one-liner:
$ perl -ne '$n=3;push @lines,$_; END{for($i=0;$i<=$#lines;$i++){
if ($lines[$i]=~/blah/){
print $lines[$i-$n],$lines[$i],$lines[$i+$n]}}
}' example.txt
b
blah
g
f
blah
g
Para alterar o número de linhas circunvizinhas, altere $n=3;
para $n=N
, em que N
é o número desejado. Para alterar o padrão correspondente, altere if ($lines[$i]=~/blah/)
para if ($lines[$i]=~/PATTERN/)
.
Se os números são realmente parte do arquivo, você pode fazer algo assim:
$ perl -ne '$n=3;push @lines,$_; END{for($i=0;$i<=$#lines;$i++){
if ($lines[$i]=~/blah/){
print $lines[$i-$n],$lines[$i],$lines[$i+$n]}}
}' example.txt | perl -pne 's/\d+/$./'
1. b
2. blah
3. g
4. f
5. blah
6. g