Sostituzione di stringhe con wildcard in vim

From RVM Wiki
Revision as of 16:09, 16 January 2012 by Gabriele.vivinetto (talk | contribs) (Created page with "Se si vogliono cercare delle stringhe contenenti wildcard in vim, e sostituirle correttamente, occorre far suo delle backreference nelle regular expression. La backreference si …")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Se si vogliono cercare delle stringhe contenenti wildcard in vim, e sostituirle correttamente, occorre far suo delle backreference nelle regular expression.

La backreference si definisce con le parentesi quotate:

\(mystring\)

e si richiamano con la loro occorrenza numerica quotata

\1

Ad esempio se si vogliono sostituire tutte le stringhe

myhost01.mydomain.com
myhost02.mydomain.com

Con

myhost01.mynewdomain.com
myhost02.mynewdomain.com

La parte della stringa da ricercare è

myhost..\.mydomain

cioè myhost due_caratteri_qualsiasi punto mydomain

I due caratteri qualsiasi costituiscono la parte "variabile" che va memorizzata nella backreference, quindi la definiamo come

myhost \(..\)\.mydomain

E la richiamiamo con il suo numero nella stringa di sostituzione

myhost\1.mynewdomain

Quindi la regex di find and replace sarà

:%s/myhost\(..\)\.mydomain/myhost\1.mynewdomain/gc

Naturalmente se ci sono più stringhe "variabili", so usano più backreference...

Riferimenti