Vervangen. * In vi

Ik moet alle exemplaren van “period asterisk” vervangen zoals het hier wordt weergegeven:

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

met:

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

zodat het eindresultaat er als volgt uitziet:

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

Ik heb verschillende varianten van het volgende geprobeerd, maar het werkte niet:

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

Antwoord

Je gaf een voorbeeld van een regel met “punt asterisk” drie keer herhaald, gescheiden door dubbele punten. Als je gegevens er altijd zo uitzien, kun je net zo goed vasthouden aan AlexPs antwoord . Maar uw vraag zegt dat u alle exemplaren van “punt asterisk” moet vervangen. Als die verklaring van als het probleem klopt, moet u

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

gebruiken om “punt asterisk” te vinden en te vervangen, zelfs als het niet in groepen van drie voorkomt.

Answer

Voor Vim:

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

  • % betekent de vervanging op alle regels toepassen; is niet nodig in sed waar het commando standaard op alle regels wordt toegepast.
  • \. is een punt; een kale . betekent elk teken.
  • \* is een asterisk; een kale * betekent 0 of meer van het voorgaande atoom.

Antwoord

De nomagic modifier gebruiken voor het patroon in Vim:

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

De \M verwijdert de bijzonderheid van zowel . als * in het patroon.

Zie :help magic in Vim.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *