Найти и заменить на sed в каталоге и подкаталогах - PullRequest
208 голосов
/ 20 июля 2011

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

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

Ответы [ 6 ]

359 голосов
/ 20 июля 2011

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

find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;
71 голосов
/ 24 февраля 2016

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

grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'
5 голосов
/ 26 октября 2012

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

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;
2 голосов
/ 26 января 2018
grep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orage|"
1 голос
/ 23 июля 2015

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

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

См. Эту страницу .

0 голосов

В linuxOS:

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

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

perl -i -pe 's/textSerch/textReplace/g' namefile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...