Опций grep для рекурсивного поиска файлов лучше избегать - они просто загромождают ваши аргументы grep и делают ваши сценарии непереносимыми.Уже есть очень хороший инструмент, предназначенный для поиска файлов с очень очевидным именем.
Вы просто пытаетесь заменить hello
на world
во всех ваших файлах?Если это так, то это просто
find . -type f |
while IFS= read -r file; do
sed 's/hello/world/g' "$file" > "tmp$$" &&
mv "tmp$$" "$file"
done
. Это сработает в любой оболочке на любом компьютере UNIX, если в именах ваших файлов нет символов новой строки.Если вы не хотите изменять метки времени и т. Д. Для файлов, которые не содержат hello
, используйте один из следующих способов:
find . -type f -exec grep -q 'hello' {} \; -print |
while IFS= read -r file; do
sed 's/hello/world/g' "$file" > "tmp$$" &&
mv "tmp$$" "$file"
done