我有一个案例,我有一个结果文件具有以下模式:
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)