我有一组行,后跟“\”,我想打印到行尾不包含“\”字符的行。请注意,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
但不起作用。 如有任何帮助或建议,我们将不胜感激。
最佳答案
以下命令将执行您想要的操作:
sed -n '/match1/,/[^\\]$/p' file
在字符类开头使用 ^
会否定匹配。
以下为glenn jackman's great comment上面的解决方案有一个小问题。由于 [^\\]
需要至少一个字符,如果不以\结尾的第一行是空行,则它将不起作用。让我添加他的解决方案,这应该是首选方案:
sed -n '/match1/,/\(^\|[^\\]\)$/p' file
关于regex - 使用 sed 匹配行尾,前面不紧接着某个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570303/