Onko tähän yksinkertaisempi tapa? grep -v foo file | grep -v bar

Siellä on todennäköisesti erittäin tyylikkäitä tapoja tehdä se egrepillä, mutta miten mennä tavallisen vanhan grepin kanssa?

MUOKKAA: grep -v "foo\|bar" file näyttää toimivan vain GNU grep: n kanssa. I ”m Solariksessa. Onko sinulla mitään ratkaisua siihen?

Kommentit

  • Outo kysymys, koska ensimmäisessä esimerkissä teet AND matchia ja toisessa olet OR OR match . Lopputulos on sama vain hyvin erityisissä olosuhteissa.
  • Ei ei oikeastaan. Toisessa esimerkissä -v -lippu on negatiivi. not(A or B) == not(A) and not(B)

Vastaa

Sinulla voi olla useita testejä yksittäinen grep -komento siirtämällä jokainen lauseke -e -argumentilla ensimmäisenä ei-vaihtoehtoisena argumenttina, kuten normaalisti näet:

$ grep -v -e foo -e bar file 

Se sanoo saman, mitä komentosi tekee: tulostaa rivejä file, jotka eivät sisällä ”foo” eikä ”bar” .

Muista, että -v poistaminen kääntää tämän kokonaan; se muuttaa myös loogista toimintaa! Saat kaikki rivit, jotka sisältävät ”foo” tai ”bar”.

Vastaa

grep -Ev "word1|word2" pitäisi toimia hyvin.

Kommentit

  • Vaihtoehtona voit käyttää egrepiä ja pudottaa putkimerkki: egrep -v 'word1|word2
  • On käynyt ilmi, että tämä ei toimi Solaris-grepin kanssa. Asensin GNU-grepin ja toimin täydellisesti. ' aion muokata kysymystäni Solaris-spesifiseksi.
  • @rahmu \| on GNU-grep laajennus, mutta voit saavuttaa saman asian kannettavalla tavalla -E ja | -operaattorilla.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *