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?

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.