Ersätter. * I vi

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 i sed dä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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *