Как заменить текстовые строки (оптом) после получения результатов с помощью grep - PullRequest
0 голосов
/ 30 января 2019

Один из моих серверов Linux MySQL потерпел крах.Поэтому я отложил резервное копирование, однако на этот раз MySQL работает локально (localhost), а не удаленно (IP-адрес).

Благодаря пользователям Stack Overflow я нашел отличную команду для поиска IP-адреса ввсе .php файлы в данном каталоге!Команда, которую я использую для этого:

 grep -r -l --include="*.php" "100.110.120.130" .

Выводит необходимые файлы с указанием их местоположения.Если бы было менее 10 результатов, я бы просто поменял их вручную.Однако я получил более 200 просмотров / результатов.

Так что теперь я хочу знать, существует ли безопасная команда, которая заменяет IP-адрес (например, 100.110.120.130) текстом «localhost» вместо всех.php-файлы в заданном каталоге (/ var / www / vhosts /) рекурсивно.

А может, если возможно и не так уж много работать, также вывести измененные строки в файл?Я не знаю, возможно ли это вообще.

Может быть, кто-нибудь может дать мне рабочее решение?Если честно, я не смею дурачиться на ровном месте с этим.Вот почему я создал новую тему.

1 Ответ

0 голосов
/ 30 января 2019

Самый стандартный способ замены строки в нескольких файлах - использовать такой инструмент, как sed.Список файлов, полученных с помощью grep, может быть прочитан построчно (при выводе в файл) с использованием while loop в сочетании с sed.

$ grep -r -l --include="*.php" "100.110.120.130" . > list.txt
# this will output all matching files to list.txt

ЗаменаIP-адрес в совпадающих файлах :

while read -r line ; do echo "$line" >> updated.txt ; sed -i 's/100.110.120.130/localhost/g' "${line}" ; done<list.txt

Это займет list.txt и будет читать его построчно командой sed, которая должна заменить все вхождения IP на «localhost».Команда echo непосредственно перед sed выводит все имена файлов, которые будут изменены в файл updated.txt (хотя в этом нет необходимости, поскольку list.txt содержит те же точные имена файлов, хотя его можно использовать как средствовозможно, проверка).

Чтобы выполнить пробный прогон перед изменением всех совпавших файлов, удалите -i из команды sed, и он выведет вывод в stdout вместоПоместите изменение файлов.

...