regex - 使用 sed 匹配行尾,前面不紧接着某个字符

标签 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

但不起作用。 如有任何帮助或建议,我们将不胜感激。

最佳答案

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

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

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


以下为glenn jackman's great comment上面的解决方案有一个小问题。由于 [^\\] 需要至少一个字符,如果不以\结尾的第一行是空行,则它将不起作用。让我添加他的解决方案,这应该是首选方案:

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

关于regex - 使用 sed 匹配行尾,前面不紧接着某个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570303/

相关文章:

php - 如何使用 preg_match() 和 Yield(PHP 5.5 生成器语法)迭代正则表达式匹配?

linux - 如何在mailx命令中添加收件人姓名

linux - 使用 sed 替换 <space>[

ruby - 是否有内置 api 可以从字符串中提取模式(尽可能多次)?

regex - 使用正则表达式删除 PSPad 中的空行

正则表达式比较一行中的两个子字符串

bash - 如何在 shell 脚本中从 YML 中删除子 block ?

python - 如何使用正则表达式从看似乱码的文本中提取某些子文本模式?

regex - 在文件中找到正则表达式的第一个匹配项,并打印它

bash - 从一个文件到另一个文件的棘手列替换