Найти и заменить на sed в каталогах и подкаталогах

Я запустил эту команду, чтобы найти и заменить все вхождения "apple" "оранжевым" во всех файлах в корневом каталоге моего сайта:

find ./ -exec sed -i 's/apple/orange/g' {} \;

но он не проходит через подкаталоги.

что не так с этой командой?

Отредактировано: вот несколько строк вывода команды find./:

./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php

Ответ 1

Ваша находка должна выглядеть так, чтобы избежать отправки имен каталогов в sed:

find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;

Ответ 2

Для больших задач s & r лучше и быстрее использовать grep и xargs, например,

grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'

Ответ 3

Это сработало для меня:

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;

Ответ 5

В linuxOS:

sed -i 's/textSerch/textReplace/g' namefile

Если "sed" не работает, попробуйте:

perl -i -pe 's/textSerch/textReplace/g' namefile