Command line Grep仅适用于文件量中的第一个匹配项

Command line Grep仅适用于文件量中的第一个匹配项,command-line,grep,Command Line,Grep,一般来说,我正在寻找一种方法,只显示grep命令的每个匹配项一次 对于当前的用法,我打算列出所有向数据库提供文件的程序员。感兴趣的文件都是用java编写的,因此搜索模式是“@author”。 最后,我希望获得所有快捷方式的枚举(在这一点上,我甚至不关心模式出现在哪些文件中)。 结果应类似于以下示例: pak@Q:~$ grep -r "@author" | [...] @bsh @janS @Jan Snow ... 编辑:如果有人面临类似的问题,感兴趣的命令是 grep-rh“@author

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

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

pak@Q:~$ grep -r "@author" | [...]
@bsh
@janS
@Jan Snow
...
编辑:如果有人面临类似的问题,感兴趣的命令是

grep-rh“@author”| sort-u


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

grep [...] | sort -u
如果要在多个文件之间进行grepping,可能需要
-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、 --无文件名禁止在输出时使用文件名前缀。当只有一个文件(或只有标准输入)要搜索时,这是默认设置。 -s、 --无消息抑制关于不存在或不可读文件的错误消息

排序
手册页:
排序-对文本文件的行进行排序

  • -u、 --独一无二

    使用-c,检查是否严格订购;如果没有-c,则只输出相等运行的第一个

信用 感谢提供的
排序-u
版本。最初我建议如下(仍然有效):


到目前为止你告诉我们的是模棱两可的。发布简明的、可测试的示例输入和预期的输出,或者我们只是猜测您想要什么。对不起,这对我不起作用。在我看来,这只适用于同一文件中的多个外观。非常感谢您为帮助我付出的额外努力。你上次的更新确实起到了作用
grep -r "author" | sort | uniq