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

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

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

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

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

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

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

6 ответов


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

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

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

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

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

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

grep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orage|"

Я думаю, что мы можем сделать это с простой командой

for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done

относятся к этому страница.


в linuxOS:

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

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

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