如果要运行以下命令
cat * | grep DATABASE
shell会吐出包含单词DATABASE的*文件中的所有行.有没有办法同时吐出每行的文件?
我试图为grep使用-H选项,根据man说打印每个匹配的文件名,但在我的shell中它只是说
(standard input):$DATABASE_FUNCTION = dothis();
不要用猫.而是直接使用grep DATABASE *或grep -n DATABASE *(如果你想知道行号和
文件名).
见useless use of cat.
为了澄清一点:cat *实际上连接所有文件,因为它通过管道将它们提供给grep,所以grep无法知道哪个内容属于哪个文件,甚至实际上甚至不知道它是在扫描文件还是你只是快速打字.一旦使用管道,它就是一个大的标准输入流.
最后,-H几乎肯定是多余的,因为当有多个文件要搜索时,grep默认打印文件名.但是,如果您想要解析输出,它可能会有一些用处,因为* glob可能会扩展为单个文件,在这种情况下grep会省略文件名.