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 însedunde î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.