3

複数の種類のファイルを再帰的に検索し、見つかった各ファイルの特定の文字列を置き換えようとしています。しかし、スクリプトを実行すると、単一のタイプのファイルしか見つかりません。

私が使用しているコマンドラインはこれです

find . -name '*.tcl' -o -name '*.itcl' -o -name '*.db' -exec sed -i 's/abc/cba/g' {} +

上記のコマンドを実行するたびに、タイプが.のファイルのみが検出されます.db。単一のファイルタイプで実行すると、正常に動作します。

4

3 に答える 3

6

-names *あなたはそのように部分をグループ化する必要があります()

さらに、(私の経験から)sed -iパターンに一致するファイルでのみ実行する方が良いので:

find . \( -name '*.tcl' -o -name '*.itcl' -o -name '*.db' \) -exec sed -i '/abc/s/abc/cba/g' {} +
于 2012-10-15T19:48:23.030 に答える
1

以下のコマンドは、txtファイルまたはログファイルのいずれかを検索し、ソース文字列をターゲット文字列に置き換えます。

 find . -name "*.txt" -o -name "*.log"|xargs perl -pe 's/source/target/g'

以下のようにperlステートメントに-iを追加することで、置換を行うことができます。

find . -name "*.txt" -o -name "*.log"|xargs perl -pi -e 's/source/target/g'
于 2012-10-16T06:04:53.410 に答える
0

できるよ:

find . -regex ".*\.\(tcl\|itcl\|db\)" -exec sed -i 's/abc/cba/g' {} +

これはよりコンパクトであり、ORをいじって論理演算をグループ化する必要はありません。

于 2015-12-05T20:51:07.583 に答える