Extrai linhas contendo PAT1 mas não PAT2 com sed

3

Eu quero extrair as linhas contendo PAT1 mas não PAT2 de um arquivo. Por exemplo, com PAT1 = 'dog', PAT2 = 'cat' e a seguinte entrada:

1 cat chicken
2 bird dog apple
3 dog orange cat
4 cat juice coffee
5 cow milk dog

Eu quero a seguinte saída:

2 bird dog apple
5 cow milk dog
    
por loganaayahee 20.11.2012 / 15:34

2 respostas

7

Algo como:

sed '/dog/!d;/cat/d'

Veja também

grep dog | grep -v cat
    
por 20.11.2012 / 15:38
4

Você pode fazer assim:

sed -n '
    /dog/{
        /cat/!{
            p
        }
    }
' file.txt

ou com :

awk '/dog/ && !/cat/' file.txt

mais tarde, um tem a vantagem de ser muito claro & simples de lembrar.

ou usando

perl -ne 'print if /dog/ && !/cat/' file.txt
    
por 20.11.2012 / 15:37