Linux には、特定のディレクトリとその下のフォルダ内のすべてのファイルで特定の単語を見つけて、それを新しい単語に置き換えるコマンドはありますか?
答え1
これにより、すべてのファイルが置換されます。特定の種類のファイルのみが必要な場合は、より具体的に指定できます。また、.bak
元に戻す必要がある場合に備えて、処理するすべてのファイルのバックアップ ファイルが作成されます。バックアップ ファイルがまったく必要ない場合は、-i.bak
に変更します-i
。
find /path/to/directory -type f -exec sed -i.bak 's/oldword/newword/g' {} \;
不要になったバックアップ ファイルをすべて削除するには:
find /path/to/directory -type f -name "*.bak" -exec rm -f {} \;
答え2
次のコマンドを使用できます。
grep -lR "foo" /path/to/dir | xargs sed -i 's/foo/bar/g'
文字列「foo」を含むファイルを検索し、sedをgrep
呼び出してその中の「foo」を「bar」に置き換えます。その結果、「foo」を含むファイルのみが変更されます。残りのファイルは変更されません。
答え3
単一のコマンドではなく、複数のコマンドの組み合わせです。
find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ;
例ここ
答え4
さらに制御したい場合は、次のような Python スクリプトを使用できます。