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

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

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

它提供输出:

log dog dos

我怎样才能使它取代所有发生的狗?

155695 次浏览

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

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

您应该添加 g修饰符,以便 sed 对模式缓冲区的内容执行 全球性的替换:

echo dog dog dos | sed -e 's:dog:log:g'

有关 sed 的精彩文档,请检查 http://www.grymoire.com/Unix/Sed.html

GNU sed的官方文档可在 http://www.gnu.org/software/sed/manual/上获得