Nahrazování. * Ve vi

Musím nahradit všechny výskyty „hvězdičky období“, jak je zobrazeno zde:

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

s:

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

takže konečný výsledek vypadá takto:

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

Zkoušel jsem různé varianty následujících možností, ale nefungovalo to:

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

Odpovědět

Uvedli jste příklad třikrát opakovaného řádku s „hvězdičkou období“ odděleného dvojtečkami. Pokud vaše data budou vždy vypadat tak, můžete také použít odpověď AlexP . Vaše otázka však říká , že je třeba nahradit všechny výskyty „hvězdičky období“. Pokud toto prohlášení z problém je přesný, měli byste použít

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

, který vyhledá a nahradí „hvězdičku období“, i když se neobjeví ve skupinách po třech.

Odpověď

Pro Vim:

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

  • % znamená použít substituci na všechny řádky; není potřeba v sed, kde je příkaz ve výchozím nastavení použit na všechny řádky.
  • \. je tečka; holý . znamená libovolný znak.
  • \* je hvězdička; holý * znamená 0 nebo více předchozího atomu.

odpověď

Použití nomagic modifikátoru vzoru ve Vimu:

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

\M odstraní zvláštnost vzoru . a *.

Viz :help magic ve Vimu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *