Jag måste ersätta alla förekomster av ”period asterisk” som det visas här:
blah blah .*:.*:.* blah blah
med:
[0-9][0-9]:[0-9][0-9]:[0-9][0-9]
så att slutresultatet ser ut så här:
blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah
Jag försökte olika varianter av följande men det fungerade inte:
%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g
Svar
Du gav ett exempel på en rad med ”period-asterisk” upprepad tre gånger, åtskilda av kolon. Om dina data alltid ser ut så kan du lika gärna hålla fast vid AlexPs svar . Men din fråga säger att du måste ersätta alla förekomster av ”period asterisk”. Om det uttalandet av problemet är korrekt bör du använda
:%s/\.\*/[0-9][0-9]/g
som hittar och ersätter ”period-asterisk” även när den inte visas i grupper om tre.
Svar
För Vim:
För sed: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g".
-
%betyder tillämpa substitutionen på alla rader; behövs inte iseddär kommandot som standard tillämpas på alla rader. -
\.är en period; en bar.betyder vilken karaktär som helst. -
\*är en asterisk; ett kalt*betyder 0 eller fler av föregående atom.
Svar
Använd nomagic modifieraren för mönstret i Vim:
:%s/\M.*/[0-9][0-9]/g
\M tar bort specialiteten hos både . och * i mönstret.
Se :help magic i Vim.