Ответ 1
Ваша находка должна выглядеть так, чтобы избежать отправки имен каталогов в sed:
find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;
Я запустил эту команду, чтобы найти и заменить все вхождения "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
Ваша находка должна выглядеть так, чтобы избежать отправки имен каталогов в 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 {} \;
Я думаю, что мы можем сделать это с помощью простой командной строки
for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done
Ссылка на страницу: http://www.geekpills.com/operating-system/linux/search-and-replace-with-sed-in-directory-and-sub-directories/1694/
В linuxOS:
sed -i 's/textSerch/textReplace/g' namefile
Если "sed" не работает, попробуйте:
perl -i -pe 's/textSerch/textReplace/g' namefile