Livre BSD / Mac OS X Sed: Imprimir correspondência regex e a linha 5 linhas após o jogo

3

Eu achei que seria sed -n /mymatch/,+5p , mas recebo o endereço de contexto esperado. Neste momento estou apenas adivinhando comandos, nada funciona! Eu quero pegar cada linha que corresponda ao regex e imprimir essa linha e a linha que vem 5 linhas depois, globalmente de um arquivo.

    
por Gregg Leventhal 24.01.2014 / 15:53

3 respostas

3

Pode ser mais fácil com awk :

awk '/foo/ {print; p[NR+5]; next}; NR in p'
    
por 24.01.2014 / 19:42
2

Aqui está uma abordagem de força bruta e pode não funcionar como você espera se houver outra correspondência dentro das 5 linhas:

sed -n '/mymatch/ {p;n;p;n;p;n;p;n;p;n;p;}'
    
por 24.01.2014 / 17:00
0

Se você não quer as linhas entre, você pode fazer isso:

perl -lne '$a=5 if /foo/; print if $a==0||$a==5; $a--' file.txt 

ou, se você preferir fazer slurping:

perl -e '@f=<>; for($i=0;$i<=$#f;$i++){print "$f[$i]$f[$i+5]" if $f[$i]=~/foo/}' file 
    
por 24.01.2014 / 16:56