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.