grep —一致が見つかったファイル名のリスト


31

ディレクトリにたくさんの.htmlファイルがあります。各ファイルを調べて、パターン(MD5)に一致させたい。これらはすべて簡単です。問題は、一致が見つかったファイルを知る必要があることです。

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

一致が見つかったHTMLページコンテンツのみを返しますが、見つかったファイルを教えてくれません。一致が見つかったファイル名を表示するためにgrepを取得するにはどうすればよいですか。


提供された提案は実際には機能しません。...私が得るすべては「標準入力」ですcat * .html | grep -i -H 1ee024007823cc0bfbefba98ba1e1f4c(標準入力):<html> <head> <title>
BeMy Friend

4
あなたはポイントを逃しています。catを使用する必要はありません。猫は、grepが個々のファイルを区別できないようにします。
ムル

このStack Overflowの投稿は役に立つかもしれません。
パブロA

回答:


32
grep -H 75447A831E943724DD2DE9959E72EE31 *.html

-H, --with-filename
              Print the file name for each match. This is
              the default when there is more than one file
              to search.

3
それが言うように、それは複数のファイルのデフォルトなので、複数のhtmlファイル-Hがある限り、必要ではありません。
ムル

1
申し訳ありませんが私の質問は不快でした。私はしばらくこれに取り組んでいると言っておくべきでしたし、いくつかのスイッチを使用し、デフォルトでファイル名をリストしているというMANページを読みました...しかし、私が得るのは(標準入力)ファイル名をリストする場所。
BeMy Friend

-Hスイッチを指定した場合のみです。OPにリストしたことだけを行うと、ファイル名は提供されません。
BeMy Friend

3
@BeMyFriend、問題はcatです。cat連結することを意味します。渡す前にすべてのファイルを連結するとgrepgrep1つの大きな標準入力ファイルだけが表示され、(占いを行うのではなく)単一のファイルに関する情報を返すことができません。見る?。サイラス、答えでこれを説明するのはどうですか?
Rmano

OK、問題はcatコマンドですが、解決策は何ですか?
ヨーゼフクリムク

20

私はこれを常に使用して、ディレクトリ内で文字列を含むファイルを再帰的に探します(つまり、サブサブサブフォルダをトラバースします) grep -Ril "yoursearchtermhere"

  • R 再帰的に検索することです(シンボリックリンクをたどって)
  • i 大文字と小文字を区別しないようにすることです
  • l ファイルの名前をリストするだけです。

あなたの質問に答える grep -l '75447A831E943724DD2DE9959E72EE31' *.htmlことはできgrep -Ril '75447A831E943724DD2DE9959E72EE31'ますが、任意のサブフォルダ内の任意のファイルで、大文字と小文字を区別せずにその文字列を検索するだけ でできます


macOSは、常にファイル定義を必要とします。ワイルドカードの可能性があります。それ以外の場合、stdingrep:warning:stdinの再帰検索、再帰的なstdin入力が何であれ:-) からの入力を想定します。言い換えれば:grep -Ril 'texttofind' *
Villeの

grep -RiH 'pattern'ファイル名と一致した行を
表示-Ikrom


2
grep -r -H 75447A831E943724DD2DE9959E72EE31 *.html | awk -F : ' { print $1 } '

の代替

grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html

上記を行うと、フォルダーとサブフォルダーを再帰的に検索し、ファイルのパスを出力します...


grep -r -lが私にとって唯一の機能です。
ヨーゼフクリムク

0

サイラスによって投稿答えは絶対に適切であると右の方法であるTMでそれを行うためにgrep、我々は次の場合にのみ、ファイルを検索する必要があります。ファイル名に追加の解析または一致したファイル名の操作が必要な場合、whileループ付きifステートメントの使用に頼ることができます。以下は、ファイル名のリストが、ファイル名の安全な解析のために非常に一般的に使用されるfind+ while構造に由来する例です。

find -type f -name "*.html" -print0 | while IFS= read -r -d '' filename
do
    if grep -q 'PATTERN' "$filename"
    then
        printf "%s found in %s\n" 'PATTERN' "$filename"
        # Here we can insert another command or function
        # to perform other operations on the filename
    fi
done

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.