Usando VI, ¿cómo puedo buscar y reemplazar la siguiente declaración?

StackOverflow https://stackoverflow.com/questions/823484

  •  05-07-2019
  •  | 
  •  

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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top