我想要的是在目录中找到所有包含匹配项的文件,当找到匹配项时,它会显示找到该匹配项的文件。
例子
cat * | grep password:
这里会显示所有包含“密码:”的匹配项
但它没有显示匹配属于哪个文件。
答案1
cat
我认为在您将示例中的结果通过管道传输后,不可能获取文件名,因为该cat
命令只会连接内容,此后有关文件名的信息就消失了。
您可以做的是依靠grep
命令在获取多个输入文件时的行为,然后grep
显示每个匹配的文件名。
因此,
cat * | grep password:
你可以这样做:
grep password: *
答案2
使用cat
和grep
打印出当前目录中包含“密码:”字符串的文件的名称:
cat * 2>&- | grep -ls 'password:' *
带有完整文件路径:
cat * 2>&- | grep -ls 'password:' ${PWD}/*
2>&-
用于抑制有关无法读取某些文件/目录的错误消息。
仅使用grep
来做同样的事情:
grep -ls 'password:' *
带有完整文件路径:
grep -ls 'password:' ${PWD}/*
使用grep
模式匹配“密码:”字符串,打印文件名,然后用来cat
显示整个文件的内容:
for match in $(grep -ls 'password:' *) ; do
echo "${match}"
cat "${match}"
done
带有完整文件路径:
for match in $(grep -ls 'password:' *) ; do
echo -e "\e[7m\n$(readlink -f "${match}")\e[0m"
cat "${match}"
done