2013-08-14 2 views

ответ

6

Используйте глобальную команду для захвата первого номера, и если второе число будет одинаковым, оно будет соответствовать регулярному выражению.

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

Или не очень магическими

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

Пояснения для регулярных выражений.

  • \v включается очень магия в Vim
  • ( начать регулярное выражение захвата/обратной ссылки
  • -? необязательный знак минус
  • \d+ матч любое число 1 или несколько раз (которые получают захвачена обратной ссылки)
  • (\.\d+) дополнительная десятичная запятая
  • ) end regex capture
  • , матч запятая
  • \s матч некоторая форма пробельных
  • \1 матч по той же схеме, что был захвачен в первой обратной ссылки (в этом случае первое число) (то есть убедиться, что номера одинаковы
  • , убедитесь, что номер продолжается до следующей запятой

:g короток для :global, который для каждой строки, которая соответствует регулярному выражению выполняет команду экс после него. Команда в этом случае равна d, которая удаляет строку.

:g/regex/cmd 

Взгляните на :h :g и :h pattern-searches

+0

Можете ли вы уточнить, как это работает. – DurgaDatta

+0

Даже строка «11, 14, 4» удаляется. – DurgaDatta

+0

@DurgaDatta Regex Я там не удаляю «11, 14, 4» – FDinoff