กรอง / grep เอาท์พุทบางคอลัมน์เท่านั้นหรือไม่?


4

ฉันจะกรองเอาท์พุทบางคอลัมน์ได้อย่างไร

ฉันต้องการสิ่งนี้:

tail -f logs/access_log | grep -v "200" --only-in-column=1

ดังนั้นฉันต้องการเห็นเฉพาะบรรทัดที่ไม่มีสตริง '200' ในคอลัมน์แรก

คำตอบ:


15

awk อาจเป็นเครื่องมือที่เป็นที่ยอมรับสำหรับปัญหาประเภทนี้

$ cat data
foo 200 bar
foo 200 baz
bar 4   baz

$ cat data | awk '$2 != 200 { print $0 }'
bar 4   baz

5
โดยวิธีการที่คุณสามารถเขียนการกระทำเป็น{ print }หรือละเว้นมันทั้งหมด (เพียงawk '$2 != 200') เนื่องจากprint $0เป็นการกระทำเริ่มต้น
David Z

1
ขอบคุณยินดีที่ได้เรียนรู้บางสิ่งโดยตอบคำถามของคนอื่น
Nathan O'Sullivan

0

สิ่งนี้จะได้ผล:

tail -f logs/access_log | grep -v '^200[[:blank:]]'

ซึ่งไม่รวมบรรทัดที่ขึ้นต้นด้วย "200" ตามด้วยช่องว่างหรือแท็บ

คุณสามารถเลือกชุดตัวคั่นที่แตกต่างกันตามความต้องการของคุณ

tail -f logs/access_log | grep -v '^200[^[:alnum:]]'

ซึ่งไม่รวมบรรทัดที่ขึ้นต้นด้วย "200" ตามด้วยอักขระอื่นที่ไม่ใช่ตัวอักษรหรือตัวเลข

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