我在一个目录中有一堆 .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