用 sed 替换字符或行尾之间的匹配

412p9w

匹配评论之间的所有内容下一个行尾并用单词bar替换它

s="/home/user/14.JPG;comment:foo;sometag;sort:30"
sed "s/comment:(\w+)/\bar/g" <<< $s

退货

/home/user/14.JPG;comment:foo;sometag;sort:30

代替

/home/user/14.JPG;comment:bar;sometag;sort:30

我究竟做错了什么?

加西莫多

首先,您尝试使用扩展正则表达式 (ERE),但 Sed 默认使用基本正则表达式 (BRE)。即,()用于分组和+用于“一个或多个”的是 ERE。有关更多详细信息,请阅读为什么我的正则表达式适用于 X 而不适用于 Y?. 要激活 ERE,请使用该-E标志(但我们的解决方案不需要它)。

即使这样还不够,因为你也在匹配comment:(\w+),但是

  • 你不重新介绍comment:将其放入替换槽中。
  • 作为\w匹配单词字符的 GNU 扩展(\w+)并不是;问题所声称的“一切都到下一个”,那将是[^;]*.

解决办法是

sed 's/comment:[^;]*/comment:bar/g'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章