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