删除grep输出中的重复项

时间:2018-03-16 04:18:37

标签: bash grep

我有一个案例,我得到一个具有以下模式的结果文件:

path:pattern found

例如

./user/home/file1:this is a game

换句话说,当我搜索一些字符串时,我得到了文件和它找到的行。

问题有时我在同一个文件中有多个案例,所以我想删除重复文件(案例会有所不同,所以不可能)。

感谢任何帮助或想法:)

最终结果是:

/user/home/desktop/file1:this is a game
/user/home/desktop/file1:what kind of game
/user/home/desktop/file1:fast action game

只发现第一个结果而不会丢失文件中的所有其他数据。

UPDATE1:

所以实际文件如下所示:

/user/home/desktop/file1:this is a game
/user/home/desktop/file1:what kind of game
/user/home/desktop/file1:fast action game
/user/home/desktop/file2:a game
/user/home/desktop/file3:of game
/user/home/desktop/file4:fast game

我希望摆脱同一文件中的多次出现,所以它应该是这样的:

/user/home/desktop/file1:this is a game
/user/home/desktop/file2:a game
/user/home/desktop/file3:of game
/user/home/desktop/file4:fast game

1 个答案:

答案 0 :(得分:9)

您可以使用sort -u

grep pattern files | sort -t: -u -k1,1
  • -t: - 使用:作为分隔符
  • -k1,1 - 仅根据第一个字段排序
  • -u - 删除重复项(基于第一个字段)

这将只保留一次文件,删除任何重复文件。

对于您的示例,这是您获得的输出:

/user/home/desktop/file1:this is a game

如果您要查找与文件的多个不同匹配项,则:

grep pattern files | sort -u