要从包含"hi"的行打印到包含"bye"的行,我会:
awk'/hi/./bye/'
要从包含"hi"的行打印到文件末尾,我会:
awk'/ hi /,0'
如何编写脚本以在这两种结束条件下结束打印?
在awk使用变量p作为标志时:
$ cat file
start
line 2
hi
line 4
bye
end
$ awk '/hi/{p=1}{if (p) print}' file
hi
line 4
bye
end
$ awk '/hi/{p=1}{if (p) print}/bye/{p=0}' file
hi
line 4
bye
Run Code Online (Sandbox Code Playgroud)
更简洁:
$ awk '/hi/{p=1}p' file
hi
line 4
bye
end
$ awk '/hi/{p=1}p;/bye/{p=0}' file
hi
line 4
bye
Run Code Online (Sandbox Code Playgroud)
但我喜欢sed这样:
$ sed -n '/hi/,/bye/p' file
hi
line 4
bye
$ sed -n '/hi/,$p' file
hi
line 4
bye
end
Run Code Online (Sandbox Code Playgroud)