Grep仅适用于文件数量的第一场比赛

时间:2016-02-08 12:03:36

标签: command-line grep

一般来说,我正在寻找一种方法来只显示一次grep命令的每个匹配。

对于当前用法,我打算列出所有为数据库提供文件的程序员。感兴趣的文件都是用java编写的,因此搜索模式是" @ author"。 最后,我想得到所有快捷方式的枚举(此时我甚至不关心,模式出现在哪个文件中)。 结果应类似于以下示例:

pak@Q:~$ grep -r "@author" | [...]
@bsh
@janS
@Jan Snow
...

编辑:如果有人遇到类似的问题,感兴趣的命令是

  

grep -rh" @ author" | sort -u

1 个答案:

答案 0 :(得分:2)

非常简单,您可以排序并获得唯一条目:

grep [...] | sort -u

如果您要浏览多个文件,您可能需要-h选项,并且可能需要-s来隐藏错误消息:

实施例

例如:

dir
├── a
│   └── File contents:
│       @author ed
│       @author frank
│       @author ben
│     
└── b
    └── File contents:
        @author ben
        @author frank
        @author steve

从我们dir运行

$ grep -sh '@author' * | sort -u

输出:

@author ben
@author ed
@author frank
@author steve

更多信息

来自grep手册页:

  

-h, - no-filename禁止输出中的文件名前缀。当只有一个文件(或仅标准输入)要搜索时,这是默认设置。    -s, - no-messages抑制有关不存在或不可读文件的错误消息。

来自sort手册页:

  

排序 - 排序文本文件行

     
      
  • -u, - 唯一

         

    用-c,检查严格的排序;没有-c,只输出相同运行中的第一个

  •   

信用

感谢sort -u版本的@EdMorton。最初我建议如下(仍然有效):

grep -r "author" | sort | uniq