linuxの下で特定の文字列を含むファイルを探したいと思います。 私は何かを試しましたが、成功できませんでした:egrepを使って文字列を含むファイルを見つける方法
find。 -name * .txt |
find . -name '*.txt' | xargs egrep mystring
バージョンと二つの問題があります:egrepの
linuxの下で特定の文字列を含むファイルを探したいと思います。 私は何かを試しましたが、成功できませんでした:egrepを使って文字列を含むファイルを見つける方法
find。 -name * .txt |
find . -name '*.txt' | xargs egrep mystring
バージョンと二つの問題があります:egrepの
ファイル名(find command
の出力)をegrepに入力します。実際には、ファイルの内容にegrepを実行する必要があります。
find . -name "*.txt" -exec egrep mystring {} \;
または
find . -name "*.txt" -print0 | xargs -0 egrep mystring
チェックfind command helpは、単一の引数が何をチェックして、より良い:ここで
は選択肢のカップルです。egrep
が
*.txt
ファイルへのパスだけです
find . -name *.txt
によって生成された出力内
mystring
を検索するように動作しません
試しMYSTRING
まずを、*.txt
は、まずあなたの現在のディレクトリ内のファイルのリストを与え、シェルによって展開されますこれは.txt
で終了します。たとえば、次のような場合は次のようになります。
[[email protected]:~]$ ls *.txt
test.txt
[[email protected]:~]$
find
コマンドは
find . -name test.txt
になります。ただ、説明するために、次の試してください。
第二
[[email protected]:~]$ echo find . -name *.txt
find . -name test.txt
[[email protected]:~]$
を、egrep
がSTDIN
からファイル名を取ることはありません。それらを使用する引数に変換するにはxargs
私はまた、次のパターンを囲むことをお勧め - シェルがパターンマッチングを行うのを防ぐために引用符で囲んだ名前 –
このような包括的な答えを提供してくれた皆さんに感謝します。 – Tolga
find . -name *.txt | egrep mystring
。
代わりに、あなたはxargs
を使用することができます。
find . -name *.txt | xargs egrep mystring
あなたは
find . -iname *.txt -exec egrep mystring \{\} \;
を使用することができます。ここERROR
で始まる行を持っているすべての*.log
ファイルのファイルパスを返します例です:
find . -name "*.log" -exec egrep -l '^ERROR' {} \;
あなたはファイル名のみをしたい場合は、
これは機能しません。 -Rオプションは、引数リストで指定されている場合にのみ、ディレクトリに再帰的に適用されます。この場合、それらのディレクトリ内のすべてのファイルは、.logで終わるファイルだけでなく読み込まれます。この方法で成功した場合は、シェルが* .logを解析するため、現在のディレクトリに.logで終わるファイルがあるためです。 –
おそらく 'egrep -R 'パターン" --include = *。log .'? – moala
egrep -R "pattern" *.log
を使用することができますegrepのからの再帰的なオプション:
find . -type f -name '*.txt' -exec egrep -l pattern {} \;
したい場合は、ファイル名と一致:
find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;
最初のコマンドの最後に '\ +'や '\;'がありません。 – spatz
これはmystring内のファイル名を検索しようとしませんか?私は彼が別の方法を探していると思う。 – Kevin
@spatz:この感謝の言葉をありがとう、私は例を修正した。 –