grep 'word1\|word2' text.txt
procura por linhas que contenham word1
ou word2
. Isso inclui linhas que contenham ambos.
grep word1 text.txt | grep word2
procura por linhas contendo word1
e word2
. As duas palavras podem se sobrepor (por exemplo, foobar
contém foo
e ob
). Outra maneira de procurar linhas contendo ambas as palavras, mas apenas de maneira não sobreposta, é procurá-las em qualquer ordem: grep 'word1.*word2\|word2.*word1' text.txt
grep word1 text.txt | grep -v word2
procura por linhas contendo word1
, mas não word2
. A opção -v
diz ao grep para manter linhas não correspondentes e remover linhas correspondentes, em vez do oposto. Isso lhe dá metade dos resultados que você queria. Ao adicionar a pesquisa simétrica, você obtém todas as linhas contendo exatamente uma das palavras.
grep word1 text.txt | grep -v word2
grep word2 text.txt | grep -v word1
Como alternativa, você pode começar pelas linhas que contêm uma das palavras e remover as linhas que contêm as duas palavras. Dados os blocos de construção acima, isso é fácil se as palavras não se sobrepuserem.
grep 'word1\|word2' text.txt | grep -v 'word1.*word2\|word2.*word1'