如何在匹配行之前使用 grep 显示文件名和行号

x33g5p2x  于2022-07-22 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(527)

grep 是一个 Linux 实用程序,通常用于搜索文件内容或传递给它的任何输入。在搜索多个文件时,显示文件名和行号很有用,尤其是在使用它在 shell 脚本中自动化时。

使用 grep 显示文件名

默认情况下,如果您将多个文件传递给,为了清楚起见grep,它将显示filename: 在匹配行之前。您实际上可以使用标志关闭此行为,该-h 标志永远不会显示文件名:

但是,如果您只将一个文件传递给grep,则默认情况下它不会显示文件名。在使用 shell 脚本进行自动化时,这可能会成为一个问题,因为您可能不知道目录中有多少文件,并且它可能会破坏依赖于文件名的自动化。

简单的解决方法是使用大写 -H 标志,它与文件名相反,-h 并且无论如何都会打开文件名,即使只有一个文件作为输入传递。

grep -H "foo" file

该-H 标志还有另一个意想不到但有用的效果——当与来自 的输入(例如 Unix 管道)配对时stdin,它将(standard input): 代替文件名打印。

使用 grep 显示行号

您还可以将其与-n 标志结合使用以获取行号:

grep -Hn "foo"

符合 POSIX

中的-H 标志grep不符合 POSIX,并且在一些更晦涩的基于 Unix 的操作系统中不可用。幸运的是,您可以使用一个 hack,通过将/dev/null 伪造的第二个文件输入传递给grep,这会欺骗它认为有多个文件:

相关文章