"awk"从一个令牌打印到下一个令牌或文件末尾

use*_*084 0 regex awk token

要从包含"hi"的行打印到包含"bye"的行,我会:

awk'/hi/./bye/'

要从包含"hi"的行打印到文件末尾,我会:

awk'/ hi /,0'

如何编写脚本以在这两种结束条件下结束打印?

Chr*_*our 5

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)