在VIM中删除重复模式的行

时间:2013-08-14 17:38:08

标签: regex vim

我有一个文件,每行的格式为: - x,y,z - 其中x,y,z都是数字。例如

10, 10, 1
10, 11, 2.0
455, 42, 12

我想删除前两个数字相等的那些行。我该怎么做?

1 个答案:

答案 0 :(得分:6)

使用全局命令捕获第一个数字,如果第二个数字相同则匹配正则表达式。

:g/\v(-?\d+(\.\d+)?),\s\1,/d

或者没有非常神奇的

:g/\(-\?\d\+\(\.\d\+\)\?\),\s\1,/d

正则表达式的解释。

  • \v在vim
  • 中非常神奇
  • (启动正则表达式捕获/反向引用
  • -?可选减号
  • \d+匹配任意数字1次或更多次(由反向引用捕获)
  • (\.\d+)可选的小数部分
  • )结束正则表达式捕获
  • ,匹配逗号
  • \s匹配某种形式的空白
  • \1匹配在第一个反向引用中捕获的相同模式(在本例中为第一个数字)(即确保数字相同
  • ,确保号码延伸到下一个逗号

:g:global的缩写,对于与正则表达式匹配的每一行,它都会执行ex命令。在这种情况下,命令是d,删除该行。

:g/regex/cmd 

查看:h :g:h pattern-searches