Muszę zamienić wszystkie wystąpienia „kropki gwiazdki”, jak pokazano tutaj:
blah blah .*:.*:.* blah blah
with:
[0-9][0-9]:[0-9][0-9]:[0-9][0-9]
, aby wynik końcowy wyglądał następująco:
blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah
Próbowałem różnych odmian poniższych, ale to nie działało:
%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g
Odpowiedź
Podałeś przykład linii z trzykrotnie powtórzoną „kropką gwiazdką” oddzieloną dwukropkami. Jeśli Twoje dane zawsze będą tak wyglądać, równie dobrze możesz trzymać się Odpowiedź AlexP . Twoje pytanie mówi , że musisz zamienić wszystkie wystąpienia „gwiazdki kropki”. Jeśli to stwierdzenie problem jest poprawny, powinieneś użyć
:%s/\.\*/[0-9][0-9]/g
, który znajdzie i zastąpi „gwiazdkę kropki”, nawet jeśli nie występuje ona w grupach po trzy.
Odpowiedź
Dla Vima:
Dla sed: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g".
-
%oznacza zastosowanie podstawienia we wszystkich wierszach; nie jest potrzebny wsed, gdzie domyślnie polecenie jest stosowane do wszystkich linii. -
\.to kropka; czysty.oznacza dowolny znak. -
\*to gwiazdka; czysty*oznacza 0 lub więcej poprzedzającego atomu.
Odpowiedź
Użycie modyfikatora nomagic dla wzorca w Vimie:
:%s/\M.*/[0-9][0-9]/g
\M usunie specjalność zarówno ., jak i * we wzorcu.
Zobacz :help magic w Vimie.