Como filtrar resultados exclusivos da saída grep?

75

No linux, posso grep uma string de um arquivo usando grep mySearchString myFile.txt. Como posso obter apenas resultados únicos?

hap497
fonte

Respostas:

125

Você pode conseguir isso com os utilitários sorte uniq.

exemplo:

[john @ awesome ~] $ echo -e "teste \ ntest \ ntest \ nanother teste \ ntest"
teste
teste
teste
outro teste
teste
[john @ awesome ~] $ echo -e "teste \ ntest \ ntest \ nanother teste \ ntest" | classificar | uniq
outro teste
teste

dependendo dos dados, você também pode utilizar alguns dos comutadores.

John T
fonte
9
@ John T - Eu recomendaria usar sortantes uniq, caso os dados não sejam solicitados. Caso contrário uniq, não funcionará completamente.
Studer
agora eu posso votar! Você também me ajudou a escrever outros scripts aqui;)
Studer
42
Use em sort -uvez de sort | uniq. Ele salva um processo, reduz o total de E / S e reduz o número total de comparações que precisam ser feitas.
Chris Johnsen
@ChrisJohnsen Você deve fazer com que comentar uma resposta, pois é uma solução melhor do que a resposta dada atual
Nico Van Belle
1

Você pode usar:

grep -rohP "(mySearchString)" . | sort -u

-r: recursivo

-o: imprime apenas parte correspondente do texto

-h: não imprime nomes de arquivos

-P: Regex estilo Perl (você pode usar -E, dependendo do seu caso)

sort -ué melhor do que sort | uniq, como @Chris Johnsen apontou.

Pato
fonte