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 vsed, 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.