Почему sed не заменяет все вхождения?

Если я запустил этот код в bash:

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

он выводит результат:

log dog dos

Как я могу заставить его заменить все вхождения собаки?

Ответ 1

Вы должны добавить модификатор 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/

Ответ 2

Вы должны положить g в конце, это означает "глобальный":

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