【问题标题】:Bash grep output filename and line no without matchesBash grep 输出文件名和不匹配的行号
【发布时间】:2014-03-13 19:28:50
【问题描述】:

我需要使用 grep 获取匹配列表,包括文件名和行号,但没有匹配字符串

我知道grep -Hl 只会给出文件名,grep -Hno 只会给出匹配字符串的文件名。但那些对我来说并不理想。我需要得到一个没有匹配但有行号的列表。对于这个grep -Hln 不起作用。我试过grep -Hn 'pattern' | cut -d " " -f 1 但它没有正确地剪切文件名和行。

【问题讨论】:

    标签: linux bash shell grep cut


    【解决方案1】:

    awk 可以在单个命令中做到这一点:

    awk '/pattern/ {print FILENAME ":" NR}' *.txt
    

    【讨论】:

    • 看来这也是一个不错的选择。对awk不太熟悉,我觉得是时候学习了。 Tnx
    • 是的更好,因为它在单个命令中完成所有操作(不需要多个管道命令)
    【解决方案2】:

    你用cut 很好地指出了它,只是你需要: 字段分隔符。另外,我认为您需要第一组和第二组。因此,使用:

    grep -Hn 'pattern' files* | cut -d: -f1,2
    

    样本

    $ grep -Hn a a*
    a:3:are
    a:10:bar
    a:11:that
    a23:1:hiya
    
    $ grep -Hn a a* | cut -d: -f1,2
    a:3
    a:10
    a:11
    a23:1
    

    【讨论】:

      【解决方案3】:

      试试

      grep -RHn Studio 'pattern' | awk -F: '{print $1 , ":",  $2}'
      

      【讨论】:

        【解决方案4】:

        我猜你想要这个,只是行号:

        grep -nh PATTERN /path/to/file | cut -d: -f1
        

        示例输出:

        12
        23
        234
        ...
        

        很遗憾,您需要在此处使用cut。纯grep是没有办法的。

        【讨论】: