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

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

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`