คำตอบที่ดีหลายคนได้รับคำถามนี้เพื่อให้ห่างไกล แต่ฉันยังคงคิดถึงหนึ่งที่มีไม่ได้ใช้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"
ตรรกะประกอบด้วยการจัดเก็บบรรทัดที่พบ "blah" เสมอแล้วพิมพ์บรรทัดเหล่านั้นที่เป็นหนึ่งบรรทัดหลังจาก
ทดสอบ
ไฟล์ตัวอย่าง:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
รับทุกบรรทัดหลังจาก "blah" สิ่งนี้จะพิมพ์ "blah" อีกอันถ้ามันปรากฏขึ้นหลังจากอันแรก
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
รับทุกบรรทัดหลังจาก "blah" หากพวกเขาไม่มี "blah" ด้วยตนเอง
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
ตัวเลือก