現在の作業ディレクトリ内のすべてのファイルで使用されている用語を置き換えるには、次のコマンドを実行します。
$ find . -type f -print0 | xargs -0 sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g'
これは単語置換を実行しますが、.bup
文字列を含むファイルがまったく含まれていないファイルも生成しますMs. Johnson
。
不要なバックアップを作成せずに交換を実行するにはどうすればよいですか?
ベストアンサー1
-exec
Findには任意のコマンドを実行する演算子があります。より良い点-exec
はテスト、複数のコマンドを一緒に接続でき、-exec
前のコマンドが失敗した場合、以降のコマンドは実行されません。この文字列は{}
現在のファイル名に変更され、;
コマンドの終わりを表示します。シェル干渉を防ぐために、両方を引用する必要があります。
だから:
find . -type f \
-exec grep -q 'Ms. Johnson' '{}' \; \
-exec sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g' '{}' \;