У меня была похожая потребность, и я придумал это:
эта команда для простого поиска всех файлов:
grep -i -l -r foo ./*
this, чтобы исключить this_shell.sh (в случае, если вы поместили команду в скрипт с именем this_shell.sh ), передайте вывод в консоль, чтобы увидеть, что произошло, и затем используйте sed для каждого файла найдено имя для замены текста foo на bar:
grep -i -l -r --exclude "this_shell.sh" foo ./* | tee /dev/fd/2 | while read -r x; do sed -b -i 's/foo/bar/gi' "$x"; done
Я выбрал этот метод, поскольку мне не нравилось менять все временные метки для файлов, которые не были изменены. подача результата grep позволяет просматривать только файлы с целевым текстом (что, вероятно, также может повысить производительность / скорость)
обязательно сделайте резервную копию ваших файлов и протестируйте их перед использованием. Может не работать в некоторых средах для файлов со встроенными пробелами. (?)