Minun täytyy korvata kaikki jakson tähti ”esiintymät”, kuten se näkyy täällä:
blah blah .*:.*:.* blah blah
kanssa:
[0-9][0-9]:[0-9][0-9]:[0-9][0-9]
niin, että lopputulos näyttää tältä:
blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah
Kokeilin seuraavien muunnelmia, mutta se ei toiminut:
%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g
Vastaa
Annoit esimerkin rivistä, jonka ”piste-tähti” toistetaan kolme kertaa kaksoispisteillä erotettuna. Jos tietosi näyttävät aina sellaisilta, voit yhtä hyvin pitää kiinni AlexP: n vastaus . Mutta kysymyksesi kertoo , että sinun on korvattava kaikki jaksotähden esiintymät. Jos kyseinen lauseke ongelma on tarkka, sinun tulee käyttää
:%s/\.\*/[0-9][0-9]/g
joka löytää ja korvaa ”jaksotähden”, vaikka se ei näy kolmena ryhmänä.
Vastaus
Vimille:
For sed: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g".
-
%tarkoittaa korvauksen käyttämistä kaikilla viivoilla; ei tarvitased-kohdassa, jossa komentoa käytetään oletusarvoisesti kaikille riveille. -
\.on piste; paljas.tarkoittaa mitä tahansa merkkiä. -
\*on tähti; paljas*tarkoittaa 0 tai enemmän edellisestä atomista.
Vastaa
nomagic -muokkauksen käyttäminen Vim-mallissa:
:%s/\M.*/[0-9][0-9]/g
\M poistaa sekä mallin . että * erikoisuuden.
Katso :help magic Vimissä.