UNIX замена строки в куче файлов

Материал из Выращивание растений.
Перейти к: навигация, поиск


Под управлением ОС Unix:

Если необходимо выполнить поиск некоторого текстового фрагмента и заменить на другой в целой куче файлов (которую тоже нужно найти по некоторым условиям), то можно воспользоваться утилитой sed в паре с командой поиска файлов find.

Только сначала нужно убедиться , что Ваш sed нормально работает с опцией -i. Если нет, то Вам следует обновить системный sed или скомпилировать из исходников свой, собственный sed (в какой - нибудь отдельной папке).

Итак: СНАЧАЛА СОВЕТ - СДЕЛАЙТЕ BACKUP всех файлов каталога, в котором будете работать.

Проверка sed: Делаете пробный файл и натравливаете на него "replacer":

sed -i 's/search/replace/g' путь_до_пробного_файла

,где search - то что нужно найти, а replace - на что заменить Смотрите, sed выполнил замену или нет. Дальше добавляем поиск фалов средствами find (может быть выставлена куча условий с помощью ключей, смотри man find). Например, так можно заменить фрагменты во всех php файлах каталога /www:

find /www -name "*.php" -exec sed -i 's/search/replace/g' {} \;

Обратите внимание на пробел между фигурными скобками и слэшем в конце!