猫* | grep的东西…结果是什么文件?

如果要运行以下命令

cat * | grep DATABASE 

shell会吐出包含DATABASE这个词的*文件中的所有行。 还有什么办法可以吐出每一行都是什么文件?

我试图使用grep的-H选项,根据manprint the filename for each match但在我的shell,它只是说

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

不要使用猫。 而是直接使用grep DATABASE *grep -n DATABASE * (如果您想知道行号以及文件名)。

看猫的无用的用法 。

澄清一点: cat *实际上连接所有的文件,因为它将它们通过pipe道input到grep,所以grep无法知道哪个内容属于哪个文件,甚至不能真正知道它是在扫描文件还是你只是打字威猛很快。 一旦你使用pipe道,这都是一个很大的标准inputstream。

最后, -H几乎肯定是冗余的,因为grep打印文件名时默认情况下,它有多个文件search。 但是,如果你想parsing输出,可能会有一些用处,因为* glob可能会扩展成单个文件,grep会在这种情况下忽略文件名。

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

你遇到的问题是,用你的命令, cat *将所有的文件连接成一个大混乱,然后是| 将其发送到grep DATABASE的标准input。 到grep看到数据的时候,关于它来自哪里的信息已经丢失了。 解决的办法是让grep完成查看单个文件的工作,所以当它find匹配的时候就知道它来自哪个文件。