代码之家  ›  专栏  ›  技术社区  ›  berserker

正在搜索哪个文件?

  •  0
  • berserker  · 技术社区  · 9 年前

    假设我正在grepping多个文件,有没有方法显示grep当前正在搜索的文件?

    前任:

    grep "*.log" file1 file2 file3 file4
    

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

    谢谢

    4 回复  |  直到 9 年前
        1
  •  1
  •   Inian    9 年前

    正如评论中所讨论的, 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 你可以遵循以下顺序 格雷普 在每个输入文件中进行模式匹配。

        2
  •  0
  •   tripleee    9 年前

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

    ls -l /proc/1234/fd/3
    

    哪里 1234 是的PID 格雷普 过程

        3
  •  0
  •   cb0    9 年前

    您可以使用一个简单的循环和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
    
        4
  •  -1
  •   dimo414    9 年前

    使用 --with-filename 当然是将结果与包含结果的文件相关联的更简单的方法,但是如果您真的想查看哪个文件 grep

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

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