Como posso imprimir as linhas em um arquivo que contém dois regex, onde um é o substring de outro

1

Se o arquivo tiver -

apple,orange,banana
orange
ora,orange,apple
apple,ora
orange,apple,ora,banana

Quero imprimir apenas as linhas que contêm ora e orange -

ora,orange,apple
orange,apple,ora,banana
    
por anonymous 22.08.2017 / 08:32

2 respostas

2

Com único egrep :

egrep 'ora\b.*orange|orange.*ora\b' file

A saída:

ora,orange,apple
orange,apple,ora,banana

Ou com uma única expressão sed :

sed -n '/orange/{/ora\b/p}' file
ora,orange,apple
orange,apple,ora,banana

Em ambas as abordagens \b (limite de palavras) é usado.

    
por 22.08.2017 / 08:54
1

Grep para palavras inteiras:

$ grep -w orange foo.csv | grep -w ora
ora,orange,apple
orange,apple,ora,banana

-w significa que o texto correspondente deve ser rodeado por caracteres que não sejam de palavra (os caracteres da palavra são alfabetos, dígitos, sublinhados).

    
por 22.08.2017 / 08:39