Sostituzione di stringhe con wildcard in vim
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...