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.