¿Cómo puedo filtrar resultados únicos de la salida grep?

75

En Linux, puedo usar una cadena de un archivo grep mySearchString myFile.txt. ¿Cómo puedo obtener solo el resultado que es único?

hap497
fuente

Respuestas:

125

Puede lograr esto con sorty las uniqutilidades.

ejemplo:

[john @ awesome ~] $ echo -e "prueba \ ntest \ ntest \ nanother prueba \ ntest"
prueba
prueba
prueba
otra prueba
prueba
[john @ awesome ~] $ echo -e "prueba \ ntest \ ntest \ nanother prueba \ ntest" | ordenar | uniq
otra prueba
prueba

dependiendo de los datos, es posible que desee utilizar algunos de los conmutadores también.

John T
fuente
9
@John T: recomendaría usar sortantes uniqen caso de que los datos no estén ordenados. De uniqlo contrario no funcionará por completo.
Studer
¡Ahora puedo votar! También me ayudaste a escribir otros guiones aquí;)
Studer
42
Usar en sort -ulugar de sort | uniq. Guarda un proceso, reduce la E / S total y reduce el número total de comparaciones que deben realizarse.
Chris Johnsen
@ChrisJohnsen Debería hacer que ese comentario sea una respuesta, ya que es una mejor solución que la respuesta dada actualmente
Nico Van Belle
1

Puedes usar:

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

-r: recursivo

-o: solo imprime parte coincidente del texto

-h: no imprimir nombres de archivo

-P: expresión regular de estilo Perl (puede usar -E en su lugar según su caso)

sort -ues mejor que sort | uniq, como señaló @Chris Johnsen.

Pato
fuente