วิธีการป้องกัน grep จากการพิมพ์สตริงเดียวกันหลาย ๆ ครั้ง?


15

หากฉัน grep ไฟล์ที่มีต่อไปนี้:

These are words
These are words
These are words
These are words

... สำหรับคำTheseนั้นมันจะพิมพ์สตริงThese are wordsสี่ครั้ง

ฉันจะป้องกัน grep ไม่ให้พิมพ์สตริงที่เกิดซ้ำมากกว่าหนึ่งครั้งได้อย่างไร มิฉะนั้นฉันจะจัดการเอาต์พุตของ grep เพื่อลบบรรทัดที่ซ้ำกันได้อย่างไร


ลำดับของการแข่งขันควรจะถูกเก็บไว้ในผลลัพธ์หรือไม่ มิฉะนั้นคำสั่ง John1024 ที่โพสต์จะใช้งานได้
kos

คำตอบ:


23

ปรัชญา Unix คือการมีเครื่องมือที่ทำสิ่งหนึ่งและทำได้ดี ในกรณีนี้grepเป็นเครื่องมือที่เลือกข้อความจากไฟล์ หากต้องการทราบว่ามีรายการที่ซ้ำกันหรือไม่ให้เรียงลำดับข้อความ การลบรายการที่ซ้ำหนึ่งใช้ตัวเลือกในการ-u sortดังนั้น:

grep These filename | sort -u

sortman sortมีหลายทางเลือกดู หากคุณต้องการนับซ้ำหรือมีรูปแบบที่ซับซ้อนมากขึ้นสำหรับการพิจารณาสิ่งที่เป็นหรือไม่ซ้ำกันแล้วท่อส่งออกเรียงลำดับไปที่uniq: grep These filename | sort | uniqและดูmanuniq` สำหรับตัวเลือก


2

การใช้grepและสวิตช์เพิ่มเติมหากคุณกำลังมองหาเพียงสายเดียว

grep -m1 'These' filename

จาก man grep

-m NUM, --max-count=NUM
        Stop reading a file after NUM matching lines.  If the input is
        standard input from a regular file, and NUM matching lines are
        output, grep ensures that the standard input is positioned  to
        just  after  the  last matching  line  before exiting, regardless
        of the presence of trailing context lines.  This enables a calling
        process to resume a search.  When grep stops after NUM matching
        lines, it outputs any trailing context lines.  When the -c or
        --count option is also used, grep does not output a count greater
        than NUM.  When the -v or --invert-match option is also used, grep
        stops after outputting NUM non-matching lines.

หรือใช้awk ;)

awk '/These/ {print; exit}' foo

IMHO คำตอบที่เหมาะสมที่สุดคือแฟล็ก -m ฉันแนะนำให้คุณใส่คำตอบของคุณ คำตอบที่ดีมาก!
Sergiy Kolodyazhnyy

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