我有一个文件,其中每一行的格式为: - x,y, z - 其中 x, y, z 都是数字。例如
10, 10, 1
10, 11, 2.0
455, 42, 12
我想删除前两个数字相等的那些行。我该怎么做呢?
使用全局命令捕获第一个数字,如果第二个数字相同,它将匹配正则表达式。
: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