sed フル置換を実行して変更されたファイルのみをバックアップするにはどうすればよいですか?

sed フル置換を実行して変更されたファイルのみをバックアップするにはどうすればよいですか?

現在の作業ディレクトリ内のすべてのファイルで使用されている用語を置き換えるには、次のコマンドを実行します。

$ find . -type f -print0 | xargs -0 sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g'

これは単語置換を実行しますが、.bup文字列を含むファイルがまったく含まれていないファイルも生成しますMs. Johnson

不要なバックアップを作成せずに交換を実行するにはどうすればよいですか?

ベストアンサー1

-execFindには任意のコマンドを実行する演算子があります。より良い点-execテスト、複数のコマンドを一緒に接続でき、-exec前のコマンドが失敗した場合、以降のコマンドは実行されません。この文字列は{}現在のファイル名に変更され、;コマンドの終わりを表示します。シェル干渉を防ぐために、両方を引用する必要があります。

だから:

find . -type f \
    -exec grep -q 'Ms. Johnson' '{}' \; \
    -exec sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g' '{}' \;

おすすめ記事