使用grep删除字符串中的重复项



我有一个包含模块和查询的日志文件,按照这个顺序:

com.ab
com.ab
com.ac
com.ad
com.ab
com.ac
com.ad

因此我使用下面的grep命令来删除重复项:

grep -m1 'com.a' filename

,但它没有给出正确的输出,因为我想要的输出是这样的,它删除重复,并找到不同的模式:

com.ab
com.ac
com.ad

如何使用grep

实现上述输出

可以使用

grep -F 'com.a' file | sort -u
awk '/com.a/' file | sort -u
awk 'index($0, "com.a")' file | sort -u
awk 'index($0, "com.a") && !seen[$0]++' file

这里,grep -F 'com.a' filefile中搜索固定的com.a文本(awk使用com.a正则表达式在每行搜索com.a子字符串,index($0, "com.a")版本搜索com.a作为字面值字符串),sort -u对输出进行排序并返回唯一值。

awk 'index($0, "com.a") && !seen[$0]++' file解决方案可能是最好的,一切都在单个awk中完成,参见在线演示。只有那些包含com.a子字符串的行才会被打印。

让我给你看看我最喜欢的:

| sort | uniq

当你把这个放在一些列表之后(比如cat filename),你只得到不同的值,重复的被删除。

我使用它的原因是灵活性:您可以轻松地为排序添加一个标准,如sort -k3 -n,并且在需要的情况下,您可以计算重复的数量,在uniq命令中添加-c,这可能都组合成| sort -k3 -n | uniq -c,它首先排序您的列表,基于第三列,排序以数字方式完成,然后,重复项被显示和计数。

相关内容

  • 没有找到相关文章

最新更新