Zastępowanie. * W vi

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 w sed, 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *