我有一个包含数千行文本的文本文件,如下所示.
123 hello world
124 foo bar
125 hello world
Run Code Online (Sandbox Code Playgroud)
我想通过检查该行的子部分来测试重复项.对于上面它应该输出:
123 hello world
124 foo bar
Run Code Online (Sandbox Code Playgroud)
是否有可以执行此操作的vim命令?
更新:我在Windows机器上,所以不能使用uniq
这是一个bash命令:
sort -k2 input | uniq -s4
Run Code Online (Sandbox Code Playgroud)
sort -k2 排序时将跳过第1个字段uniq -s4 将跳过前4个字符在vim中,您可以调用上面的外部命令:
:%!sort -k2 % | uniq -s4
Run Code Online (Sandbox Code Playgroud)
%将扩展为当前文件名.实际上,您可以使用以下命令在vim中进行排序:
:sort /^\d*\s/
Run Code Online (Sandbox Code Playgroud)
排序后,使用此命令删除重复的行:
:%s/\v(^\d*\s(.*)$\n)(^\d*\s\2$\n)+/\1/
Run Code Online (Sandbox Code Playgroud)
\v在模式中使用了非常魔法.$将在换行符(\n)之前匹配位置.不过,我认为这不是必要的.| 归档时间: |
|
| 查看次数: |
2802 次 |
| 最近记录: |