如何使用“cat”在多个文件中搜索?

如何使用“cat”在多个文件中搜索?

我想要的是在目录中找到所有包含匹配项的文件,当找到匹配项时,它会显示找到该匹配项的文件。

例子

cat * | grep password: 

这里会显示所有包含“密码:”的匹配项

但它没有显示匹配属于哪个文件。

答案1

cat我认为在您将示例中的结果通过管道传输后,不可能获取文件名,因为该cat命令只会连接内容,此后有关文件名的信息就消失了。

您可以做的是依靠grep命令在获取多个输入文件时的行为,然后grep显示每个匹配的文件名。

因此,

cat * | grep password:

你可以这样做:

grep password: *

答案2

使用catgrep打印出当前目录中包含“密码:”字符串的文件的名称:

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

相关内容