🐹 CentOS 7: Как сделать автоматическую замену фрагмента текста во всех файлах?
Содержание:
1. Задача.
2. Выполнение задачи.
2.1. Команда в одну строку.
2.3. Автоматизация процесса.
3. Оригиналы источников информации.
На чем было опробовано:
- CentOS Linux release 7.9.2009 (Core).
1. Задача.
Дано: Имеется каталог web-сайта или несколько каталогов с разнообразным содержимым. Внутри каталогов есть еще каталоги и так далее… Целое дерево каталогов.
Задача: Сделать автоматическую замену фрагмента текста на другой фрагмент текста во всех файлах внутри дерева каталогов.
2. Выполнение задачи.
В арсенале CentOS 7 есть пара интересных команд: команда find
и команда sed
.
Команда find
— это одна из наиболее важных и часто используемых утилит системы CentOS 7. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.
Команда sed
— это потоковый редактор текста, работающий по принципу замены. Его можно использовать для поиска, вставки, замены и удаления фрагментов в файле. С помощью этой утилиты вы можете редактировать файлы не открывая их. Будет намного быстрее если вы напишите что и на что надо заменить, чем вы будете открывать редактор mcedit, искать нужную строку и вручную всё заменять.
Общий функционал команды легко уместится в одну строку:
# find '/mesto-poiska/' -type f -name '*' -exec sed -i -r 's/THIS-IS/TO-THAT/g' {} \;
где:
/mesto-poiska/
— каталог, в котором будет осуществлён поиск;*
— все файлы подряд, опционально можно добавить маску файлов по ситуации, например, ‘*.txt’;THIS-IS
— то, что ищем и хотим заменить;TO-THAT
— то, на что мы хотим заменить, то, что ищем.
Каждый использовать данную команду, конечно, хорошо, но не особо удобно. Удобнее написать стационарный скрипт и вносить в него то, что нам требуется, а потом запускать и пускай компьютер сам делает за нас нашу работу по поиску и замене.
Прокачаем однострочную команду из предыдущего пункта.
Сделаем в скрипте переменные, в которые запрограммируем наши фрагменты для автозамены. Приделаем систему логирования действий и результатов. В цикл поместим список каталогов, по которым требуется пройтись и заменить в них фрагменты.
Для примера сделаем скрипт поиска и замены пары старых IP-адресов на один новый IP-адрес:
Цель заменить IP-адреса в тексте:
# Фрагменты, которые требуется заменить. word_off_1='10.25.36.29' word_off_2='10.25.36.28' # Фрагмент, на который требуется заменить. word_on='10.12.47.15'
Разместим скрипт в каталоге /sh
и добавим на него свойства исполняемости:
# chmod +x /sh/find-sed.sh
Запустим скрипт:
# ./sh/find-sed.sh
Результат работы скрипта:
Содержимое log-файла find.log
работы скрипта:
Проверяем целевые файлы на факт замены:
# Фрагменты, которые требуется заменить. word_off_1='10.12.47.15' word_off_2='10.12.47.15' # Фрагмент, на который требуется заменить. word_on='10.12.47.15'
Как видно замена прошла успешно!
Опционально вы можете сделать ввод фрагментов в скрипт с клавиатуры, расширить список фрагментов для замены, приделать отправку сообщения на почту и так далее.
Ссылка: «CentOS 7: Postfix 3 для отправки электронной почты с внутреннего системного «почтового ящика».
3. Оригиналы источников информации.
- losst.ru «Команда find в Linux».
- losst.ru «Команда sed в Linux».
- novall.net «Простые способы автозамены текста в Linux через SSH».