web-dev-qa-db-ja.com

ディレクトリおよびサブディレクトリでsedを検索して置き換える

このコマンドを実行して、私のサイトのルートにあるすべてのファイルで、出現するすべての '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
203
hd.

ディレクトリ名をsedに送信しないように、検索結果は次のようになります。

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

より大きなs&rタスクのためにはgrepとxargsを使うのが良くて速いです、例えば。

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

これは私のために働いた:

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;
5
blackdad
grep -e Apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|Apple|orage|"
2
rocLv

1行の簡単なコマンドでこれができると思います

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

これを参照してください page

1
Sukrant