Înlocuind. * În vi

Trebuie să înlocuiesc toate aparițiile „asteriscului de perioadă” așa cum se arată aici:

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

cu:

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

astfel încât rezultatul final să arate astfel:

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

Am încercat diferite variante ale următoarelor, dar nu a funcționat:

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

Răspuns

Ați dat un exemplu de linie cu „asterisc de punct” repetată de trei ori, separate prin două puncte. Dacă datele dvs. vor arăta întotdeauna așa, s-ar putea să rămâneți cu Răspunsul lui AlexP . Dar întrebarea dvs. spune că trebuie să înlocuiți toate aparițiile „asteriscului de perioadă”. Dacă acea declarație din problema este corectă, ar trebui să utilizați

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

care va găsi și înlocui „asterisc de punct” chiar și atunci când nu apare în grupuri de trei.

Răspuns

Pentru Vim:

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

  • % înseamnă aplicarea substituției pe toate liniile; nu este necesar în sed unde în mod implicit comanda este aplicată tuturor liniilor.
  • \. este o perioadă; un gol . înseamnă orice caracter.
  • \* este un asterisc; un * gol înseamnă 0 sau mai mult din atomul precedent.

Răspuns

Utilizarea modificatorului nomagic pentru modelul din Vim:

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

\M va elimina specialitatea atât a ., cât și a * din model.

Consultați :help magic în Vim.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *