ฉันจะกรองผลลัพธ์ที่ไม่เหมือนใครออกจากผลลัพธ์ grep ได้อย่างไร


75

ในลินุกซ์ผมสามารถ grep grep mySearchString myFile.txtสตริงจากไฟล์โดยใช้ ฉันจะได้รับเฉพาะผลลัพท์ที่ไม่ซ้ำได้อย่างไร

คำตอบ:


125

คุณสามารถทำสิ่งนี้ได้ด้วยsortและuniqยูทิลิตี้

ตัวอย่าง:

[john @ awesome ~] $ echo -e "ทดสอบ \ ntest \ ntest \ nantest ทดสอบ \ ntest"
ทดสอบ
ทดสอบ
ทดสอบ
การทดสอบอื่น
ทดสอบ
[john @ awesome ~] $ echo -e "ทดสอบ \ ntest \ ntest \ nantest ทดสอบ \ ntest" | จัดเรียง | UNIQ
การทดสอบอื่น
ทดสอบ

ขึ้นอยู่กับข้อมูลที่คุณอาจต้องการใช้สวิตช์บางตัวเช่นกัน


9
@John T - ฉันจะแนะนำให้ใช้sortก่อนuniqในกรณีที่ข้อมูลไม่ได้รับคำสั่ง มิฉะนั้นuniqจะไม่ทำงานอย่างสมบูรณ์
Studer

ตอนนี้ฉันสามารถลงคะแนนได้! คุณช่วยฉันเขียนสคริปต์อื่น ๆ ที่นี่ด้วย)
Studer

42
ใช้แทนsort -u sort | uniqมันบันทึกกระบวนการลด I / O ทั้งหมดและลดจำนวนการเปรียบเทียบทั้งหมดที่ต้องทำ
Chris Johnsen

@ChrisJohnsen คุณควรแสดงความเห็นคำตอบเนื่องจากเป็นวิธีแก้ปัญหาที่ดีกว่าจากนั้นคำตอบที่ได้รับในปัจจุบัน
Nico Van Belle

1

คุณสามารถใช้ได้:

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

-r: เรียกซ้ำ

-o: พิมพ์ส่วนที่ตรงกันของข้อความเท่านั้น

-h: อย่าพิมพ์ชื่อไฟล์

-P: สไตล์ Perl regex (คุณอาจใช้ -E แทนขึ้นอยู่กับกรณีของคุณ)

sort -uดีกว่าsort | uniqที่ @Chris Johnsen ชี้ให้เห็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.