为什么sed不会替换所有出现的事件?

时间:2013-04-06 09:19:49

标签: bash sed

如果我在bash中运行此代码:

echo dog dog dos | sed -r 's:dog:log:'

它给出了输出:

log dog dos

如何让它替换所有出现的狗?

2 个答案:

答案 0 :(得分:155)

您应该添加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/

获取

答案 1 :(得分:21)

你必须在最后加g,它代表“全球”:

echo dog dog dos | sed -r 's:dog:log:g'
                                     ^