Como usar variáveis em substituição com expressões regulares vim

0

Eu tenho um arquivo grande que contém, entre outras, linhas serverais da seguinte forma:

USet07-1
USet07-2
USet08-1
USet08-2
.
.
.
USet22-2
.
.
.

Desejo remover o hífen / hífen - dessas strings em vim . Eu procuro as strings com:

:/USet\d\d-\d

mas quando tento substituí-los por

:%s/Uset\d\d-\d/USet\d\d\d

Obviamente, obtenho

USetddd

para todas as instâncias. Mas o que eu quero é:

USet071
USet072
USet081
USet082
.
.
.
USet222
.
.
.

Como isso pode ser feito? Posso reutilizar partes da string combinada e usá-la na substituição?

    
por lord.garbage 16.03.2015 / 12:02

2 respostas

4

Sim, você pode, com grupos de captura . Basicamente, você quebra as partes do padrão com \(...\) e faz referência a isso na peça de substituição com etc.:

:%s/Uset\(\d\d\)-\(\d\)/USet

Como você só deseja remover uma única parte do padrão, uma opção mais curta está restringindo a correspondência real (mas ainda afirmando que o material também está lá) via \zs (início da partida) ) e \ze (final do jogo):

:%s/Uset\d\d\zs-\ze\d//

Essas são todas as coisas básicas e os grupos de captura são comuns em muitas ferramentas baseadas em expressões regulares (como sed ). Aprenda como procurar comandos e navegue no :help incorporado; é abrangente e oferece muitas dicas. Você não aprenderá o Vim tão rápido quanto outros editores, mas se você se comprometer com o aprendizado contínuo, ele será um editor muito poderoso e eficiente.

    
por 16.03.2015 / 12:10
1

Eu mesmo encontrei uma solução usando correspondência de substring graças à vim help:

:%s/\(USet\d\d\)-\(\d\)//gc
    
por 16.03.2015 / 12:08