До сих пор было дано много хороших ответов на этот вопрос, но я все еще скучаю по одному из них, awk
не используя getline
. Так как, в общем-то , использовать не нужно getline
, я бы пошел на:
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
или
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
Логика всегда заключается в сохранении строки, в которой находится «бла», и последующей печати строк, следующих за одной строкой.
Тест
Образец файла:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
Получить все строки после "бла". Это печатает другой "бла", если он появляется после первого.
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
Получить все строки после "бла", если они не содержат "бла" сами.
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
варианта