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

StackOverflow https://stackoverflow.com/questions/1204781

質問

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

find . | xargs grep '...'

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

役に立ちましたか?

解決

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

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

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

またはgrepを引き続き使用する場合:

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

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

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

他のヒント

'。'は任意の文字に一致するため、3つ以上の文字を含むすべての行が検索されます。

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

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

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

find . | xargs fgrep '...'

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

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

grep -R "\.\.\." *

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

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

一致するファイル名を探している場合は、次を試してください:

find . -name "filename pattern" 

または

find . | grep "filename pattern"

一致する(つまりgrep文字列を含む)ファイルを探している場合

find . | xargs grep "string pattern"

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

grep "string pattern" -R *

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

find . -type f | xargs grep 'your_pattern'

または

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

xargsに似ています

RTFMを追加するかもしれません!または、より丁寧な方法で:&を使用します悪用

man command

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top