grep — 列出匹配的文件名

grep — 列出匹配的文件名

我在一个目录中有一堆 .html 文件。我想查看每个文件并匹配一个模式 (MD5)。这一切都很容易。问题是我需要知道在哪个文件中找到了匹配项。

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

仅返回找到匹配项的 HTML 页面内容,但没有告诉我找到匹配项的文件。如何让 grep 显示找到匹配项的文件名?

答案1

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.

答案2

我一直用这个来在目录中递归地查找包含字符串的文件(这意味着遍历任何子子子文件夹) grep -Ril "yoursearchtermhere"

  • R是递归搜索(跟随符号链接)
  • i是不区分大小写
  • l只是列出文件的名称。

因此回答你的问题 grep -l '75447A831E943724DD2DE9959E72EE31' *.html就可以了,但你也可以 grep -Ril '75447A831E943724DD2DE9959E72EE31'在任何子文件夹中的任何文件中查找该字符串(不区分大小写)

答案3

你可以尝试一下

grep -rl '75447A831E943724DD2DE9959E72EE31' * > found.txt

答案4

Cyrus 的回答绝对正确,而且是正确的做法如果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

相关内容