哪个文件是grep搜索?

时间:2016-06-27 05:26:31

标签: bash grep

假设我正在研究多个文件,有没有办法显示grep当前正在搜索哪个文件?

例如:

grep "*.log" file1 file2 file3 file4

是否可以通过grep确定当前正在搜索哪个文件,即file1,file2,file3等,并显示此输出?

谢谢!

4 个答案:

答案 0 :(得分:1)

正如评论中所讨论的那样,grep为此提供了选项-H。从man页面

   -H, --with-filename
          Print the file name for each match.  This is the default when there is more than one file to search.

您需要做的就是在命令中添加标记为grep -H "*.log" file1 file2 file3 file4,您可以观察grep在每个输入文件中匹配模式的顺序。

答案 1 :(得分:0)

如果grep未显示任何匹配项,并且您想知道它当前正在扫描哪个文件,您可能需要检查它已打开的文件句柄。这不是可移植的,但在Linux上,似乎文件描述符3将是您要检查的文件描述符,您可以使用

ls -l /proc/1234/fd/3

其中1234grep进程的PID。

答案 2 :(得分:0)

你可以使用一个简单的循环和globstar来运行所有文件并回显名称然后grep你的模式。

for file in **
do
  echo "searching $file"
  grep "$pattern" "$file"
done

这将显示结果:

searching file1 
LINE_WITH_PATTERN 
searching file2 
searching file3
LINE2_WITH_PATTERN

如果您只想搜索特定文件...

for file in file1 file2 file3 file4

答案 3 :(得分:-1)

使用--with-filename肯定是将结果与包含结果的文件相关联的更简单方法,但如果您真的想查看当前正在搜索的文件grep,您可以简单地在循环中调用它:

for f in file1 file2 file3 file4; do
  echo "Searching $f"
  grep "*.log" "$f"
done

这将在搜索开始之前打印文件名。