cat * | grep something...结果在哪个文件中?

cat * | grep something...结果在哪个文件中?

如果要运行以下命令

cat * | grep DATABASE

shell 会输出 * 文件中所有包含该单词的行DATABASE。有没有办法输出每行属于哪个文件?

我尝试使用-Hgrep 选项,但在我的 shell 中它只是manprint the filename for each match

(standard input):$DATABASE_FUNCTION = dothis();

答案1

不要使用 cat 来做这件事。而应直接使用grep DATABASE *or grep -n DATABASE *(如果您想知道行号以及文件名)。

猫的无用用途

再澄清一点:cat *实际上,在通过管道将所有文件提供给 grep 时,它会将所有文件连接起来,因此 grep 无法知道哪些内容属于哪个文件,甚至无法真正知道它是在扫描文件还是您只是在快速输入。一旦使用管道,它们就都是一个大的标准输入流。

最后,-H这几乎肯定是多余的,因为当 grep 需要搜索多个文件时,它会默认打印文件名。不过,如果你想解析输出,它可能会派上用场,因为 glob 可能*会扩展为单个文件,在这种情况下 grep 会省略文件名。

答案2

使用grep -H DATABASE *(注意:如果目录中有多个文件,则为-H可选)。

您遇到的问题是,使用命令,cat *将所有文件连接在一起形成一个大混乱,然后|将其发送到 标准输入grep DATABASE。当 grep 看到数据时,有关数据来源的信息已经丢失。解决方案是让 grep 执行查看单个文件的工作,这样当它找到匹配项时,它就知道它来自哪个文件。

相关内容