Minulla on tiedosto, jossa on luettelo sähköposteista ja jokaisella rivillä on sähköposti. Haluan poistaa rivit, jotka sisältävät merkkijonon example.com tai test.com.
Yritin tätä:
sed -i "s/example\.com//ig" file.txt
Mutta se poistaa vain merkkijonon example.com. Kuinka voin poistaa koko rivin?
Vastaa
GNU sedillä:
sed "/example\.com/d;/test\.com/d" -i file.txt
poistaa rivit sarakkeella example.com ja test.com.
Lähde: man sed:
d Delete pattern space. Start next cycle.
Kommentit
Vastaa
POSIXly, voit käyttää grep:
grep -Eiv "(example|test)\.com" <in >out
Kommentit
- Ole varovainen, ettet käytä samaa tiedostoa syötteessä ja tulostuksessa , tai se katkaistaan, ennen kuin
grepvoi lukea sen.
Vastaa
Regexi vastaa vain example.com ja sed korvaa vain example.com s tyhjillä merkkijono. Regexin tulee vastata mitä tahansa riviä, joka sisältää example.com tai test.com.
sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt
Kommentit
- vastaus ei poista vastaavia rivejä; se vain tekee niistä tyhjät. – Se ei myöskään käsittele kirjainkoon erottelua (OP ' -esimerkin mukaan). -.
gon turha / merkityksetön, koskased ' n regex on ahne ja siksi etupuolella ja perässä oleva.*aiheuttaa tekstihaun ensimmäisen esiintymisen vastaavan koko riviä. - Kiitos palautteesta. En ole ' kiinnittänyt huomiota tapausherkkyyteen.
gon tapani, olet oikeassa, se ei ole välttämätöntä. Luulin myös, että tyhjennysviiva oli mitä OP halusi. Nyt kaikki on selvää. Kiitos
example(taitest) seuraa mitä tahansa merkkiä ja sittencom. Esimerkkiecho 'exampleAcom' | sed '/example.com/d'