Intereting Posts
Права Linux на смонтированные акции Сед работает как другой пользователь? Как пропустить файл в sed, если он содержит регулярное выражение? Как подключить squashfs (embedded-linux) на Ubuntu? Как я могу загрузить функции этого файла скрипта, не загружая его каждый раз? «Команда не найдена» (основы Bash / scripting) Почему я не могу перенаправить имя пути с одной команды на «cd»? Кто-нибудь действительно использует и извлекает выгоду из прозрачных огромных страниц? Как продлить время ожидания команды watch за 4200 секунд? Доступ к файлу в PHP через символическую ссылку от пользователя, который обычно не имеет разрешения Написание простого скрипта rc.d во FreeBSD Старая конфигурация X11 для vmware guest Переменные оболочки в цикле for Кросс-компиляция базы Linux для системы Big-Endian Как Wget изображения из CSV, добавлять URL-адрес и имена файлов из полей? / etc / profile, ~ / .bashrc и никакие другие файлы профиля не создаются для пользователей, только для root

Поиск и замена чего-либо, содержащегося в ‘(одинарные кавычки)

В различных файлах во многих подпапках у меня есть следующий текст в больших текстовых файлах, каждый из которых уникален

Linux.Secret = 'XYZZYXZYXZYXZYXZYXZ' 

Я хотел бы сделать так, чтобы все Linux.Secret = '' были такими же, как Linux.Secret = 'NEWSECRET'

Как я могу это сделать?

Сначала найдите все файлы, которые содержат Linux.Secret = в начале строки:

 find . -type f -exec grep -q '^Linux.Secret =' {} ';' 

Обратите внимание, что grep -q ничего не выводит, он просто выходит со статусом в зависимости от того, может ли выражение быть сопоставлено или нет.

Затем для всех файлов, которые проходят эти тесты (это обычный файл и содержит этот текст), мы запускаем простую (GNU) команду sed :

 find . -type f -exec grep -q '^Linux.Secret =' {} ';' \ -exec sed -i "s/^Linux.Secret =.*/Linux.Secret = 'NewSecret'/" {} + 

Это вносит изменения в файлы путем замены всей строки на строку, которую мы хотели бы получить. Мы обрабатываем одинарные кавычки, используя двойные кавычки вокруг выражений, которые этого требуют.

Если вам нужно быть более осторожным с соответствием и совпадением только с Linux.Secrets = за которым следует что-то в одинарных кавычках:

 find . -type f -exec grep -E -q "^Linux.Secret = '[^']+'" {} ';' \ -exec sed -E -i "s/^Linux.Secret = '[^']+'.*/Linux.Secret = 'NEWSECRET'/" {} + 

Связанные с:

  • Понимание опции -exec `find`