如何使用sed删除从匹配开始的文件中的所有行?

时间:2015-04-15 18:33:28

标签: sed

假设我们有一个包含以下内容的文件:

alpha
beta
keyword
gamma
phi

什么是查找“关键字”模式匹配的sed命令,然后删除所有行?输出将是:

alpha
beta

类似的命令sed -n -e '1,/^keyword/p'几乎可以正常工作,但在输出中留下“关键字”行。

1 个答案:

答案 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