使用sed匹配行尾不会紧跟某个字符

时间:2015-07-22 17:42:02

标签: regex sed

我有一组后面跟着' \'我想要打印到不包含' \'的行。行尾的字符。请注意,xx#yy#每个文件都会更改并且可以重复使用,我希望我的脚本可以打印从match1到' \'行尾。

match1 xx1 xx1 xx1 xx1 \
yy1 yy1 yy1 yy1 \
zz\<1\> zz1 zz1 zz1 
xx2 xx2 xx2 xx2 \
...
输出应该是:

match1 xx1 xx1 xx1 xx1 \
yy1 yy1 yy1 yy1 \
zz\<1\> zz1 zz1 zz1 

我尽力而为:

sed -n '/match1/,/\\/p' file

但不起作用。 任何帮助或建议都表示赞赏。

1 个答案:

答案 0 :(得分:3)

以下命令可以执行您想要的操作:

sed -n '/match1/,/[^\\]$/p' file

在字符类的开头使用^否定匹配。

glenn jackman's great comment之后,上述解决方案存在一些问题。由于[^\\]至少需要一个字符,如果不以\结尾的第一行是空行,则它将无法工作。让我加上他应该是首选的解决方案:

sed -n '/match1/,/\(^\|[^\\]\)$/p' file