Pode ser mais fácil com awk
:
awk '/foo/ {print; p[NR+5]; next}; NR in p'
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.
Pode ser mais fácil com awk
:
awk '/foo/ {print; p[NR+5]; next}; NR in p'
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;}'
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
Tags text-processing sed