为什么sed不能replace所有的事件?

如果我在bash中运行这个代码:

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

它给出了输出:

 log dog dos 

我怎样才能让它取代所有出现的狗?

您应该添加g修饰符,以便sed执行模式缓冲区内容的全局replace:

 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/

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

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