假设我们有一个包含以下内容的文件:
alpha
beta
keyword
gamma
phi
什么是查找“关键字”模式匹配的sed命令,然后删除所有行?输出将是:
alpha
beta
类似的命令sed -n -e '1,/^keyword/p'
几乎可以正常工作,但在输出中留下“关键字”行。
答案 0 :(得分:2)
$ sed -n '/keyword/q;p' file
alpha
beta
考虑使用更一致的方法来控制在包含/排除关键字之前/之后打印的内容的一些替代方案:
$ awk '/keyword/{f=1} !f' file # = sed -n '/keyword/q;p' file
alpha
beta
$ awk '!f; /keyword/{f=1}' file # = sed -n 'p;/keyword/q' file
alpha
beta
keyword
$ awk '/keyword/{f=1} f' file # = sed -n '/keyword/,$p' file
keyword
gamma
phi
$ awk 'f; /keyword/{f=1}' file # = sed -n '1,/keyword/{d};p' file
gamma
phi
以上awk
脚本在找到关键字时始终只设置一个标志,并且通过测试关键字测试之前或之后测试的标志来控制打印的内容。
另一方面,sed
脚本必须在第2版和第3版之间更改样式,从简单的测试/打印到范围表达式,并为第3和第4个脚本引入不同的字符/语法脚本。
有关在正则表达式周围打印范围的更多解决方案,另请参阅Printing with sed or awk a line following a matching pattern。