Utilizzando VI come posso cercare e sostituire la seguente dichiarazione?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Devo sostituire quanto segue:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

a

CREATE TABLE IF NOT EXISTS `access`

Ho provato

:%s/\/\*\!\d+(.*)\*\//\1/g

Ma non sembrava andare. Cosa sto sbagliando?

È stato utile?

Soluzione

vim richiede il backslashing + (o usa * invece). Inoltre, è necessario eseguire il backslash tra parentesi di raggruppamento in vim. Così:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

Sì, le regex posix vecchio stile di vim fanno schifo: /

Modifica: come menzionato nei commenti qui sotto, + funziona se è sfuggito a \ +. E in realtà è supportato, oops. Modificato il regex di esempio per correggere questo. Vedi anche l'esempio di Brian Carper per una versione più concisa e leggibile.

Altri suggerimenti

Usa " molto magico " ;, e usa delimitatori diversi da quelli predefiniti per rendere questo più facile da leggere (e ricordare).

:%s@\v/\*!\d+(.*)\*/@\1@g

Senza " molto magico " devi mettere una barra rovesciata davanti a + e () (ma non davanti a * o altre cose). Non è molto coerente.

Leggermente diverso e più efficiente con [^ *] + :-)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top