一般来说,我正在寻找一种方法来只显示一次grep命令的每个匹配。
对于当前用法,我打算列出所有为数据库提供文件的程序员。感兴趣的文件都是用java编写的,因此搜索模式是" @ author"。 最后,我想得到所有快捷方式的枚举(此时我甚至不关心,模式出现在哪个文件中)。 结果应类似于以下示例:
pak@Q:~$ grep -r "@author" | [...]
@bsh
@janS
@Jan Snow
...
编辑:如果有人遇到类似的问题,感兴趣的命令是
grep -rh" @ author" | sort -u
答案 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