Udskiftning. * I vi

Jeg er nødt til at erstatte alle forekomster af “periode-stjerne”, som det er vist her:

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

med:

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

så slutresultatet ser sådan ud:

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

Jeg prøvede forskellige variationer af følgende, men det fungerede ikke:

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

Svar

Du gav et eksempel på en linje med “periodestjerne” gentaget tre gange adskilt af kolon. Hvis dine data altid vil se sådan ud, kan du lige så godt holde fast ved AlexPs svar . Men dit spørgsmål siger at du er nødt til at erstatte alle forekomster af “periode-stjerne”. Hvis denne sætning af problemet er nøjagtigt, skal du bruge

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

som finder og erstatter “periodestjerne”, selv når den ikke vises i grupper på tre.

Svar

For Vim:

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

  • % betyder anvendelse af substitutionen på alle linjer; er ikke nødvendigt i sed hvor kommandoen som standard anvendes på alle linjer.
  • \. er en periode; et blott . betyder ethvert tegn.
  • \* er en stjerne; et blott * betyder 0 eller flere af det foregående atom.

Svar

Brug nomagic -modifikatoren til mønsteret i Vim:

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

\M fjerner specialiteten af både . og * i mønsteret.

Se :help magic i Vim.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *