Bagaimana saya bisa memfilter hasil unik dari keluaran grep?

75

Di linux, saya bisa mengambil string dari file menggunakan grep mySearchString myFile.txt. Bagaimana saya bisa mendapatkan hasil yang unik?

hap497
sumber

Jawaban:

125

Anda dapat mencapai ini dengan sortdan uniqutilitas.

contoh:

[john @ mengagumkan ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
uji
uji
uji
tes lain
uji
[john @ mengagumkan ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | sortir | uniq
tes lain
uji

tergantung pada data yang Anda mungkin ingin memanfaatkan beberapa sakelar juga.

John T
sumber
9
@ John T - Saya akan merekomendasikan untuk menggunakan sortsebelumnya uniqjika data tidak dipesan. Kalau uniqtidak, tidak akan sepenuhnya bekerja.
Studer
t sekarang saya dapat mengungguli! Anda juga membantu saya menulis skrip orang lain di sini;)
Studer
42
Gunakan sort -usebagai ganti sort | uniq. Menghemat proses, mengurangi I / O total, dan mengurangi jumlah perbandingan yang harus dibuat.
Chris Johnsen
@ChrisJohnsen Anda harus membuat komentar itu sebagai jawaban karena ini adalah solusi yang lebih baik daripada jawaban yang diberikan saat ini
Nico Van Belle
1

Anda dapat gunakan:

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

-r: rekursif

-o: hanya mencetak bagian teks yang cocok

-h: jangan cetak nama file

-P: Perl style regex (Anda dapat menggunakan -E sebagai gantinya tergantung pada kasus Anda)

sort -ulebih baik daripada sort | uniq, seperti yang ditunjukkan oleh @Chris Johnsen.

Pato
sumber