匹配评论之间的所有内容:下一个;或行尾并用单词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+)
,但是
解决办法是
sed 's/comment:[^;]*/comment:bar/g'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句