Пакетное изменение файлов с помощью sed

Открываю новую рубрику «Вебмастеринг», куда буду закидывать различные советы по настройкам серверов и управлению серверов, мелкому программингу и прочим небольшим. Прежде всего, чтобы самому не забыть, как правильно решать небольшие проблемки, которые решаются не слишком часто.
Первый совет: пакетное изменение набора файлов на сервере с помощью неинтерактивного редактора sed.

Если требуется разом внести изменение в некий набор файлов, то необязательно их выкачивать с сервера для изменения и потом закачивать назад — достаточно доступа к консоли сервера.  Переходим в директорию с файлами, где вводим следующую команду:

sed -i -e "s/old_text/new_text/g" *.html

Что где, начнем с конца строки:

  1. Шаблон *.html — какие файлы меняем
  2. Выражение в кавычках «s/old_text/new_text/g» — регулярное выражение замены текста old_text текстом new_text, может быть довольно сложным. Флаг g указывает на глобальную замену, иначе будет меняться только первое вхождение текста в строке.
  3. Флаг -e — параметр, что при замене надо выполнить регулярное выражение, рассмотренное выше.
  4. Флаг -i — меняем исходный файл. Будет создан бекап изменяемого файла добавлением -e, т.е. в результате работы команды появятся файлы file.html-e. Если после флага добавить пустую пару кавычек, то бекапа файлов создаваться не будет. Но лучше перебдеть, а то регулярные выражения — штука непростая и не все сразу делают, как задумано.

Для мастеров регулярных выражений без бекапа:

sed -i "" -e "s/old_text/new_text/g" *.html