web-dev-qa-db-ja.com

grepを使用して、findが提供するファイルを検索する:findの何が問題なのか。 | xargs grep '...'?

コマンドを使用する場合:

find . | xargs grep '...'

間違ったマッチを取得します。現在のフォルダー内のすべてのファイルで文字列...を検索しようとしています。

25
cupakob

Andy Whiteが言ったように、プレーン.に一致するか、ドットをエスケープするには、fgrepを使用する必要があります。

したがって、あなたは書く必要があります(-type fはファイルのみを持つことです。明らかにディレクトリは必要ありません。):

find . -type f | xargs fgrep '...'

または、まだgrepを使用する場合:

find . -type f | xargs grep '\.\.\.'

そして、currentディレクトリのみが必要で、そのサブディレクトリは必要ない場合:

find . -maxdepth 1 -type f | xargs fgrep '...'
38
Steve Schnepp

「。」は任意の文字に一致するため、3文字以上の行をすべて検索できます。

次のように、ドットをエスケープできます。

find . | xargs grep '\.\.\.'

または、正規表現一致の代わりにリテラル一致を行うfgrepを使用できます。

find . | xargs fgrep '...'

(grepの一部のバージョンは、fgrepのように動作する-Fフラグも受け入れます。)

7

@OP、...を含むファイルを探している場合、

grep -R "\.\.\." *
5
ghostdog74

文字通りgrep '...'と入力している場合、ほぼすべての文字列に一致します。 grepコマンドに実際に'...'と入力しているとは思いませんが、もしそうであれば、...は3文字と一致します。

あなたが探しているものに関する詳細な情報を投稿してください。誰かがもっとあなたを助けてくれるかもしれません。

2
Andy White

一致するfilenameを探している場合は、以下を試してください。

find . -name "filename pattern" 

または

find . | grep "filename pattern"

filesに一致するものを探している場合(つまり、grep文字列が含まれている場合)

find . | xargs grep "string pattern"

正常に動作します。または単に:

grep "string pattern" -R *
1
Jeremy Powell

ジェレミーの答えを完了するには、試してみることもできます

find . -type f | xargs grep 'your_pattern'

または

find . -type f -exec grep 'your_pattern' {} +

Xargsに似ています

私は追加するかもしれません:RTFM!またはもっと丁寧な方法で:

man command

0
Isaac Clarke