Вхождение, которое вы хотите, не является вторым вхождением; это третий. Чтобы получить третье вхождение -c с тремя строками контекста:
$ 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.
Как это устроено
awk неявно читает свои входные данные построчно. Этот скрипт использует две переменные. n отслеживает, сколько раз мы видели -c . f отслеживает, сколько строк мы должны напечатать.
/-c/{n++; if (n==3)f=3;}
Если мы достигаем строки, содержащей -c , то увеличиваем число n на единицу. Если n равно трем, тогда установите f в три.
f{print;f--;}
Если f ненулевое, выведите строку и уменьшите f .
Альтернативное решение
$ 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.
Опция -m3 сообщает grep, что нужно возвращать только первые три совпадения. tail -n4 возвращает последние четыре строки из этих совпадений. Однако, если второе и третье совпадения с -c были в пределах количества строк контекста, этот вывод может быть не тем, что вы хотите.