awk または sed を使用して文字列の再帰的な検索/置換を行うにはどうすればよいでしょうか? 質問する

awk または sed を使用して文字列の再帰的な検索/置換を行うにはどうすればよいでしょうか? 質問する

以下のすべての出現箇所を検索して置換するにはどうすればよいでしょうか。

subdomainA.example.com

subdomainB.example.com

ディレクトリツリーの下にあるすべてのテキストファイルに/home/www/再帰的に?

ベストアンサー1

find /home/www \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'

-print0それぞれの結果を、改行ではなくヌル文字で区切って印刷するように指示しますfind。ディレクトリに名前に改行が含まれるファイルがある場合でも、xargs正しいファイル名で作業できます。

\( -type d -name .git -prune \)は、 という名前のディレクトリをすべて完全にスキップする式です.git。SVN を使用する場合や、保持したい他のフォルダがある場合は、簡単に拡張できます。-not -path .gitつまり、より多くの名前と一致させるだけです。 とほぼ同等ですが、ディレクトリ内のすべてのファイルをチェックするのではなく、完全にスキップするため、より効率的です。 の実際の動作-oのために、 の後の が必要です-prune

詳細については、 を参照してくださいman find

おすすめ記事