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'