2011-03-04 6 views

答えて

7

それはあなたの質問を投稿にタイプミスがsh前にハイフンがあってはならないのですなき場合:

あなたが取得しない理由出力のファイル名がgrepは、引数として単一のファイルで実行されていることです。ファイル名を強制的に出力するには、-Hを使用します。

find . -name "*.xml" | xargs -I {} sh -c "grep -H FOO {}" 

また、xargsため-iは、バージョン4.2.9の周りに廃止されました。 -I {}を使用してください。

0

あなただけ

find . -name "*.xml" | xargs -I{} grep FOO {} 

を使用することができますし、必要があるとして、あなたはgrepコマンドで-Hまたは-nを使用することができます。

+1

。 – andr

4

-H(--with-filename)オプションを指定しない限り、コマンドラインで指定されたファイルが1つだけの場合、grepはファイルごとにgrepが呼び出され、フラグが与えられる。

ファイルごとにgrepが呼び出されるのはなぜですか?これは、(が好きであるかであるため)xargsに-I(または-i)フラグを使用すると、xargsにフラグ "-L 1"を使用するなど、各引数に対してコマンドを一度実行する必要があるからです。マニュアルページから

:述べられた質問への答えを提供していません

-I replace-str 
    Replace occurrences of replace-str in the initial-arguments with names read from 
    standard input. Also, unquoted blanks do not terminate input items; instead the 
    separator is the newline character. Implies -x and -L 1. 
関連する問題