ฉันสามารถใช้คำสั่ง sed / awk อะไรได้บ้าง เพียงแค่sort -u
จะลบอินสแตนซ์ทั้งหมด
การป้อนข้อมูล:
abc
abc
def
abc
abc
def
ผลลัพธ์ที่คาดหวัง:
abc
def
abc
def
ฉันสามารถใช้คำสั่ง sed / awk อะไรได้บ้าง เพียงแค่sort -u
จะลบอินสแตนซ์ทั้งหมด
การป้อนข้อมูล:
abc
abc
def
abc
abc
def
ผลลัพธ์ที่คาดหวัง:
abc
def
abc
def
คำตอบ:
นั่นคือสิ่งที่uniq
คำสั่งมาตรฐานสำหรับ
uniq your-file
โปรดทราบว่าuniq
การใช้งานบางอย่างเช่น GNU uniq
จะให้ลำดับบรรทัดแรกที่เรียงลำดับเดียวกัน (โดยที่strcoll()
คืน 0) ซึ่งตรงข้ามกับbyte-to-byte เหมือนกัน (โดยที่memcmp()
หรือstrcmp()
คืน 0) หากต้องการบังคับให้เปรียบเทียบไบต์กับไบต์โดยไม่คำนึงถึงการuniq
ใช้งานคุณสามารถบังคับโลแคลC
ด้วย:
LC_ALL=C uniq your-file
เสียงเรียกเข้าสามารถทำได้อย่างนี้:
:g/\v^(.*\n)\1/d
หรือหากคุณต้องการใช้เสียงเรียกเข้าเป็นเครื่องมือบรรทัดคำสั่งคุณสามารถทำเช่นนี้ได้
vim file -c "g/\v^(.*\n)\1/d" -c "wq"
วิธีนี้คุณไม่ต้องต่อสู้กับการออกเป็นกลุ่มในภายหลัง;)
คำอธิบาย:
:g/
ในทุกบรรทัดที่ตรงกับ regex นี้ ...
\v^(.*\n)\1
บรรทัดใด ๆ ตามด้วยตัวเอง ...
/d
เรียกใช้คำสั่งd elete (ลบบรรทัดปัจจุบัน) -c "wq"
คือการบันทึกการเปลี่ยนแปลงและทางออก