Nhiều câu trả lời tốt đã được đưa ra cho câu hỏi này cho đến nay, nhưng tôi vẫn bỏ lỡ một câu awk
không sử dụng getline
. Vì, nói chung , không cần thiết phải sử dụng getline
, tôi sẽ đi:
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
hoặc là
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
Logic luôn bao gồm việc lưu trữ dòng nơi "blah" được tìm thấy và sau đó in những dòng đó là một dòng sau đó.
Kiểm tra
Tệp mẫu:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
Nhận tất cả các dòng sau "blah". Cái này in một chữ "blah" khác nếu nó xuất hiện sau cái đầu tiên.
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
Nhận tất cả các dòng sau "blah" nếu chúng không chứa "blah".
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
lựa chọn