2012-08-07 16 views
15

Penso che questa sia una soluzione piuttosto semplice ma ho cercato di trovare una risposta per circa un'ora e non riesco a capirlo.Vim Regex Sostituire

Sto cercando di fare una ricerca/sostituzione in Vim che dovrebbe sostituire una serie di numeri che iniziano con 103 e sono seguiti da quattro cifre per 123 seguito dalle stesse quattro cifre, come ad esempio:

1033303 ->1233303
1033213 ->1233213

Il più vicino sono venuto è questo:

%s/103\d\{4}/123\0/g 

Tuttavia, questo si traduce in tutto il numero di cui ci si allinea dalla \0, come ad esempio:

1033303 ->1231033303

La ringrazio molto per tutto l'aiuto

risposta

21

Sei molto vicino

%s/103\(\d\{4}\)/123\1/g 

Il modello compreso tra \( e \) è un sub-abbinamento a cui è possibile accedere da \1, \2 ecc. Nell'ordine di apparizione. Vedere :help \( per ulteriori informazioni.

2

Utilizzare un gruppo di cattura:

%s/103\(\d\{4}\)/123\1/g 
1

Prova questo:

%s#103\(\d\{4}\)#123\1#g 
6

Ora w/o il gruppo di cattura!

:%s/103\ze\d\{4}/123/g 

\ze imposta qui la fine della partita. Ciò ti consente di far corrispondere l'intero schema, ma di eseguire solo la sostituzione su una parte di esso.

:h /\ze 
:h /\zs 
+0

Fare. * Dopo \ ze eseguire il trucco una volta che l'operazione è stata ignorata? – SergioAraujo

+0

Sì, eviterebbe più corrispondenze sulla stessa riga –

+0

Questo ha funzionato qui: ':% s, 103 \ ze. *, 123, g' che modifica il delimitatore (veloce per digitare) e che combina tutti i caratteri successivi con'. * 'Che sarà ignorato in sostituzione. – SergioAraujo