Некоторые версии дистрибутива sed
(а именно RedHat и семейство) добавили опцию -c
, которая выполняет это, в этом случае см. Ответ @ Исаака.
Но для тех, у кого нет патчей GNU sed, самый простой способ, который я нашел, - это просто заменить на perl, который перезаписывает файлы, подобные sed -c
, когда они доступны. Следующие команды в основном эквивалентны:
sed -ci 's/find/replace/'
perl -pi -e 's/find/replace/'
Только не слишком волнуйтесь и делайте perl -pie
; как и в случае sed -ie
, вместо интерпретации в качестве другого параметра он будет использовать e
в качестве аргумента для -i
и использовать его в качестве суффикса для резервного копирования исходного файла. Подробнее см. perldoc perlrun
.
Разбор регулярных выражений в Perl немного отличается от sed (лучше, imo) для более сложных вещей: вообще говоря, используйте меньше обратных слеш.