expresiones - Grupos de captura Vim Regex
vim grep regex (4)
Tengo una lista de palabras:
bau
ceu
diu
fou
gau
Quiero convertir esa lista en:
byau
cyeu
dyiu
fyou
gyau
Intenté el comando:
:%s/(/w)(/w/w)//1y/2/g
¿Qué tengo que cambiar para que los grupos de captura funcionen en Vim?
Si no quiere escapar de los grupos de captura con barras diagonales inversas (esto es lo que se ha perdido), anteponga /v
para convertir el motor de expresiones regulares de Vim en un modo muy mágico :
:%s//v(/w)(/w/w)//1y/2/g
También debes escapar de la paranthesis Agrupación:
:%s//(/w/)/(/w/w/)//1y/2/g
Eso hace el truco.
También puedes usar este patrón que es más corto:
:%s/^./&y
-
%s
aplica el patrón a todo el archivo. -
^.
coincide con el primer personaje de la línea. -
&y
agrega lay
después del patrón.
Una forma de solucionar esto es asegurando que el patrón esté rodeado por paréntesis escapados :
:%s//(/w/)/(/w/w/)//1y/2/g
Un poco más corto (y más mágico -al) es usar /v
, lo que significa que en el patrón después de todo, los caracteres ASCII excepto ''0''-''9''
, ''a''-''z''
, ''A''-''Z''
y ''_''
tiene un significado especial:
:%s//v(/w)(/w/w)//1y/2/g