Вы можете использовать awk
:
awk '/pattern/{c=5;next} !(c&&c--)' file
В основном: мы уменьшаем целое число c
в каждой строке ввода.Мы печатаем строки, когда c
равно 0
.* (см. ниже) Примечание: c
будет автоматически инициализироваться с помощью 0
с помощью awk при первом его использовании.
Когда слово pattern
найдено, мы устанавливаем c
в 5
, чтоделает c--<=0
false для 5 строк и заставляет awk не печатать эти строки.
* Мы могли бы использовать c--<=0
, чтобы проверить, является ли c
меньше или равен 0
.Но если между вхождениями слова pattern
имеется много (!) Строк, c
может переполниться.Чтобы избежать этого, oguz ismail предложил реализовать проверку следующим образом:
!(c&&c--)
Это проверит, если c
равно trueish (больший ноль) и толькозатем декремент c
.c
никогда не будет меньше 0
и поэтому не переполнится.Обращение этой проверки !(...)
заставляет awk
печатать правильные строки.
Примечание: обычно вы используете слово regexp
, если вы имеете в виду регулярное выражение, а не pattern
.