grep —列出找到匹配项的文件名


31

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

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

仅返回找到匹配项的HTML页面内容,但不告诉我找到该文件的文件。如何获取grep来显示找到匹配项的文件名?


提供的建议确实不起作用。...我得到的只是“标准输入”猫* .html | grep -i -H 1ee024007823cc0bfbefba98ba1e1f4c(标准输入):<html> <head> <title>
BeMy Friend

4
你错过了重点。您不需要使用猫。猫可以防止grep区分单个文件。
muru

您可能会发现此Stack Overflow帖子有用。
Pablo A

Answers:


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就没有必要。
muru

1
抱歉,我的问题令人反感。我应该说我已经做了一段时间了,并且我使用了许多开关并且已经阅读了MAN页面,其中说它默认情况下列出了文件名。...但是我得到的是(标准输入)应该在哪里列出文件名。
BeMy Friend 2015年

仅当我提供-H开关时。如果我只执行OP中列出的操作,则它不提供任何文件名。
BeMy Friend 2015年

3
@BeMyFriend,问题是catcat表示串联。如果您将所有文件传递给gheter 之前将它们串联起来grep,则grep只能看到一个大的标准输入文件,而不能(除非进行除法运算)不能给您有关单个文件的任何信息。看到?。赛勒斯(Cyrus),如何在答案中解释这一点?
Rmano 2015年

好的,问题是cat命令,但是有什么解决方案?
约瑟夫·克利穆克

20

我一直使用这个来查找包含字符串的文件,并且在目录中递归地查找(也就是说,遍历任何sub sub sub文件夹) grep -Ril "yoursearchtermhere"

  • R 是递归搜索(以下符号链接)
  • i 是使其不区分大小写
  • l 只是列出文件名。

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


macOS始终需要文件def,可能是通配符。否则,它将假定来自stdingrep:warning:stdin的递归搜索,无论递归stdin输入的含义是:-)的输入。换句话说:grep -Ril 'texttofind' *
Ville

grep -RiH 'pattern'显示文件名和匹配的行
Ikrom

7

你可以试试这个

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

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

替代

grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html

进行上述操作将在文件夹和子文件夹中进行递归搜索,并打印文件的路径...


grep -r -l是唯一对我有用的东西。
约瑟夫·克利穆克

0

发表赛勒斯答案是完全正确的,是正确的方式TM用做它grep,如果我们只需要找到文件。当文件名需要对匹配的文件名进行其他解析或操作时,我们可以求助于使用whileloop with 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.