Agrupe os comandos, assim eles compartilham a mesma entrada, então quando grep
sai sed
assume:
{ grep -B2 -m1 match1; sed '/match2/q'; } < infile
Eu sei como usar grep -B n -A m match para imprimir n e m linhas antes e depois de uma partida. Eu também sei como usar sed para imprimir a partir de match1 até match2. Mas como posso combinar isso em uma linha:
> cat file.txt
bar
foo
bar
baz
match1
qux
blah
bleep
match2
boop
blah
Exemplo de saída para n = 2:
bar
baz
match1
qux
blah
bleep
match2
Agrupe os comandos, assim eles compartilham a mesma entrada, então quando grep
sai sed
assume:
{ grep -B2 -m1 match1; sed '/match2/q'; } < infile
Tente colocar a saída do comando grep
no comando sed
? Por exemplo,
grep <options> file | sed <options>
sed é um editor de fluxo. então se você quiser imprimir as linhas anteriores que já foram, você precisa mantê-las em buffer para uso posterior. então eu primeiro mantenho duas linhas no buffer 1 {N; N} e mantenho com N; D comandos
sed -rn '1{:X N;N};
/match1[^\n]*$/{:Y N; /match2[^\n]*$/{p;n;bX}; bY};
N;D' infile
Tags grep text-processing awk sed