Sostituzione. * In vi

Devo sostituire tutte le occorrenze di “asterisco punto” come mostrato qui:

blah blah .*:.*:.* blah blah 

con:

[0-9][0-9]:[0-9][0-9]:[0-9][0-9] 

in modo che il risultato finale sia simile a questo:

blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah 

Ho provato diverse varianti di quanto segue ma “non ha funzionato:

%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g 

Risposta

Hai fornito un esempio di una riga con “punto asterisco” ripetuta tre volte, separate da due punti. Se i tuoi dati saranno sempre così, potresti anche restare con Risposta di AlexP . Ma la tua domanda dice che devi sostituire tutte le occorrenze di “asterisco punto”. Se quella dichiarazione di il problema è preciso, dovresti usare

:%s/\.\*/[0-9][0-9]/g 

che troverà e sostituirà “asterisco punto” anche quando non appare in gruppi di tre.

Risposta

Per Vim:

Per sed: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g".

  • % significa applicare la sostituzione su tutte le righe; non è necessario in sed dove per impostazione predefinita il comando viene applicato a tutte le righe.
  • \. è un punto; un . nudo indica qualsiasi carattere.
  • \* è un asterisco; un * significa 0 o più dellatomo precedente.

Risposta

Utilizzo del modificatore nomagic per il pattern in Vim:

:%s/\M.*/[0-9][0-9]/g 

Il \M rimuoverà la particolarità di entrambi . e * nel pattern.

Vedi :help magic in Vim.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *