Usando VI, ¿cómo puedo buscar y reemplazar la siguiente declaración?
Pregunta
Necesito reemplazar lo siguiente:
CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`
a
CREATE TABLE IF NOT EXISTS `access`
Lo he intentado
:%s/\/\*\!\d+(.*)\*\//\1/g
Pero eso no parece ir. ¿Qué estoy haciendo mal?
Solución
vim requiere hacer una reducción de parpadeo + (o usar * en su lugar). Además, es necesario hacer una barra diagonal inversa de paréntesis en vim. Así:
:%s/\/\*\!\d\+\(.*\)\*\//\1/g
Sí, las expresiones regulares de posix de vim apestan: /
Editar: Como se menciona en los comentarios a continuación, + funciona si se escapa como \ +. Y \ d en realidad es compatible, oops. Edito el ejemplo de expresiones regulares para corregir esto. También vea el ejemplo de Brian Carper para una versión más concisa y legible.
Otros consejos
Use " muy mágico " y use delimitadores que no sean los predeterminados para que sea más fácil de leer (y recordar).
:%s@\v/\*!\d+(.*)\*/@\1@g
Sin " muy mágico " tienes que poner una barra invertida delante de +
y ()
(pero no delante de *
o algunas otras cosas). No es muy consistente.
Ligeramente diferente y más eficiente con [^ *] + :-)
1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1