如果我在bash中运行此代码:
echo dog dog dos | sed -r 's:dog:log:'
它给出输出:
log dog dos
如何使它代替所有出现的狗?
如果我在bash中运行此代码:
echo dog dog dos | sed -r 's:dog:log:'
它给出输出:
log dog dos
如何使它代替所有出现的狗?
Answers:
您应该添加g
修饰符,以便sed 对模式缓冲区的内容执行全局替换:
echo dog dog dos | sed -e 's:dog:log:g'
有关sed的出色文档,请访问http://www.grymoire.com/Unix/Sed.html。此处说明了此全局标志:http : //www.grymoire.com/Unix/Sed.html#uh-6
有关的官方文档,GNU sed
请访问http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'
不会做全局性的事情。如果将其更改为sed -E -e 's,foo,bar,g'
有效。
您必须g
在末尾放置一个,它代表“全局”:
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
在Ubuntu上,该-r
选项表示“使用扩展的正则表达式”。因此,尽管不需要扩展正则表达式的功能,但给定命令可以正常工作。
g
用于全局替换的标志,这里也不需要该-r
选项。