viewDidAppear
标志将打印$ awk '/abc/{flag=1; next} /edf/{flag=0} flag' file
,但我只需要两个字符串中的第一个匹配行。
输入:
$0
输出:
abc
111
222
edf
333
444
abc
555
666
edf
答案 0 :(得分:1)
所以我假设您只想在第一次出现时打印出匹配的行。
为此,您可以使用其他变量,并在flag
转0
后设置
$ cat file
abc
111
222
edf
333
444
abc
555
666
edf
$ awk '/abc/{flag=1; next} /edf/{if(flag) got1stoccurence=1; flag=0} flag && !got1stoccurence' file
111
222
答案 1 :(得分:0)
如果您只想要第一组输出,那么:
awk '/abc/{flag=1; next} /edf/{if (flag == 1) exit} flag' file
或者:
awk '/abc/{flag++; next} /edf/{if (flag == 1) flag++} flag == 1' file
毫无疑问,还有其他方法可以做到这一点。第一个是简单而重要的。如果您还想处理出现在另一对模式之间的第一组线,则第二种更灵活。
请注意,如果输入文件包含:
xyz
edf
pqr
abc
111
222
edf
重要的是不要对第一个edf
做任何事情;这是一条无趣的线,因为还没有读过abc
行。
答案 2 :(得分:0)
将getline
与while
一起使用:
$ awk '/abc/ { while(getline==1 && $0!="edf") print; exit }' file
111
222
查找/abc/
,找到记录将在while
循环中输出,直到找到edf
。
答案 3 :(得分:0)
$ awk '/edf/{exit} f; /abc/{f=1}' file
111
222
如果edf可能出现在输入中的abc之前,那么它将是:
$ awk 'f{if (/edf/) exit; print} /abc/{f=1}' file
111
222