Utilizzando VI come posso cercare e sostituire la seguente dichiarazione?
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?
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