web-dev-qa-db-ja.com

ディレクトリとそのサブディレクトリ内のすべてのphpファイルのテキストを検索して置き換える方法

ディレクトリ内のすべての.phpファイルを再帰的にトラバースし、特定のテキストパターンの検索と置換を実行するシェルスクリプトを探しています。

検索パターンは非常に長い(5000文字を超える)ため、便宜上別のテキストファイルに保存される場合があります。また、スラッシュ文字が含まれています。

編集:私は最初の部分を理解したと思います:

find . -name "*.php"

しかし、どうすればそれらのファイルを検索して置き換えることができますか?

4
clamp

Sedとxargsの適切な組み合わせで簡単に実行できます。

find . -name "*.php" | xargs -n 1 echo

xargsの力を示します。

その後、サンプルファイルで、インプレース変更(-i)またはバックアップ変更(-i.bak)を使用して正規表現をテストできます。パターン/置換にすでにある場合は、他の文字を使用して「/」を置き換えることもできます。

最後に、次のようになります。

pattern=`cat /path/to/pattern`; replacement=`cat /path/to/replacement`
find . -name "*.php" | xargs -n 1 sed -i -e 's|$pattern|$replacement|g'
5
Coren

試してください:

find . -name "*.php" -exec sed -i "s/$pattern/$replacement/g" {} \;

ここで、patternは検索するパターンであり、replacementはそれを置き換えるテキストです。

sed-iオプションは、ファイルを「インプレース」で編集します。編集する前にファイルのバックアップを作成する場合は、-i'.bak'を使用します。

5
dogbane
Perl -p -i -e 's/originalString/targetString/g' `find . -name '*' -type f`
0