grepを使用して、findが提供するファイルを検索する:findの何が問題なのか。 | xargs grep '…'?
質問
コマンドを使用する場合:
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
!