如果要运行以下命令
cat * | grep DATABASE
shell会吐出包含DATABASE
这个词的*文件中的所有行。 还有什么办法可以吐出每一行都是什么文件?
我试图使用grep的-H
选项,根据man
说print 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匹配的时候就知道它来自哪个文件。