-1

私は Mac OSX ターミナルを使用しており、find を使用してファイルに対して sed を実行しています。変更されたファイルを一覧表示するにはどうすればよいですか?

これは私が使用しているものです:

find . -name '*.js' -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} +

そして、これが一致するファイルのリストを出力する方法が好きです... sedからこれを取得できますか?

find . -name "*.js" -exec grep -lr "_persistenceURL = \"prod\""  {} \;
4

2 に答える 2

1

-execこれは、sed がファイル名を処理する前にファイル名をエコーする 2 番目のアクションを find ステートメントに追加することによる、手早く汚い方法です。

find . -name '*.js' -exec echo "{}" \; -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} +

注:+最後の は少し干渉する可能性があるため、厳密に必要でない場合は に置き換え\;ます。

于 2013-01-31T17:08:33.327 に答える
0

sed値を返すメカニズムを提供せず、ファイル名へのアクセスもありません。しかし、次のことができます。

find . -name '*.js' -exec sh -c \
   'sed "s/_persistenceURL = \"prod\"/_persistenceURL = \"qa\"/g" $0 > $0.$$; \
   if ! cmp $0.$$ $0; then echo $0; mv $0.$$ $0; else rm $0.$$; fi' {} \;

コマンドをスクリプトに入れてスクリプトを実行する方がおそらくずっときれいでしょう。これは、内部シェルの pid を一時ファイルのサフィックスとして使用することに注意してください。これにより、ファイルが上書きされる可能性があるため、注意してください。コマンドをスクリプトに入れて、そのようなことに対するいくつかのチェックを追加します。

于 2013-01-31T16:57:17.083 に答える