删除grep输出中的重复项

joh*_*mas 4 bash grep

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

path:pattern found
Run Code Online (Sandbox Code Playgroud)

例如

./user/home/file1:this is a game
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助或想法都赞赏:)

最终结果是这样:

/user/home/desktop/file1:this is a game
/user/home/desktop/file1:what kind of game
/user/home/desktop/file1:fast action game
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

/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
Run Code Online (Sandbox Code Playgroud)

cod*_*ter 14

你可以使用sort -u:

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

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

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

/user/home/desktop/file1:this is a game
Run Code Online (Sandbox Code Playgroud)

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

grep pattern files | sort -u
Run Code Online (Sandbox Code Playgroud)