Пакетное изменение файлов с помощью 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

Leave a Reply

Your email address will not be published. Required fields are marked *