1

.dat以下のコマンドを使用して、すべての*.mkファイルの文字列を grep しようとしています。出力が得られないため、これが正しいかどうか疑問に思っています。

find . -name "*.mk" | grep *.dat
4

4 に答える 4

2

いいえ、正しくありません。いくつかの問題があります。1) grep に glob パターンを指定しているようです。2) パターンは引用されておらず、grep が認識する前にシェルによって展開されます。3)ファイルの内容ではなく、ファイル名をgrepします。

1) に対処するには、基本正規表現を使用し.*\.datます.dat。2) 一重引用符または二重引用符の使用の問題です。3)findファイル名を返すので、grep でそれらのファイルのそれぞれを操作したい場合は、-execfor フラグを使用するか、 をfind使用しますxargs。これらすべてをまとめると、次のようになります。

find . -name '*.mk' | xargs grep '.dat'
于 2013-01-17T07:44:51.157 に答える
2

Find の Exec フラグを使用する

ここではパイプラインは実際には必要なく、xargsの必要性をバイパスできます。次の呼び出しを使用して、標準のfindコマンドで見つかった各ファイルに対して固定文字列検索 (通常は正規表現一致より高速です) を実行します。

find . -name '*.mk' -exec grep -F .dat {} \;

GNU find を使用している場合は、代わりにこの構文を使用して、grep を複数回呼び出すプロセスのオーバーヘッドを回避できます。

find . -name '*.mk' -exec grep -F .dat {} +
于 2013-01-17T07:41:59.527 に答える
0

次のように find コマンドで exec オプションを使用します。

find . -name "*.mk" -exec grep ".dat" \{\} \;
于 2013-01-17T07:44:27.160 に答える
0

xargs を使用します。

find . -name "*.mk"| xargs grep '\.dat'
于 2013-01-17T07:36:55.293 に答える