A ocorrência que você deseja não é a ocorrência segundo ; é o terceiro . Para obter a terceira ocorrência de -c
com três linhas de contexto:
$ man sh | awk '/-c/{n++; if (n==3)f=3;} f{print;f--;}'
-c Read commands from the command_string operand instead of from the standard input. Special param‐
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
Como funciona
o awk lê implicitamente sua linha de entrada por linha. Este script usa duas variáveis. n
registra quantas vezes vimos -c
. f
rastreia quantas linhas devemos imprimir.
-
/-c/{n++; if (n==3)f=3;}
Se chegarmos a uma linha contendo
-c
, aumente a contagemn
em um. Sen
for três, definaf
para três. -
f{print;f--;}
Se
f
for diferente de zero, imprima a linha e diminuaf
.
Solução alternativa
$ man sh | grep -A3 -m3 -- -c | tail -n4
-c Read commands from the command_string operand instead of from the standard input. Special param‐
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
A opção -m3
diz ao grep para retornar apenas as três primeiras correspondências. tail -n4
retorna as últimas quatro linhas entre essas correspondências. Se a segunda e a terceira correspondência para -c
estiverem dentro do número de linhas de contexto, essa saída pode não ser o que você deseja.