ค้นหาโปรแกรมเช่นtail
หรือless
ที่ให้ฉันดูบันทึกของฉันไม่มีบรรทัดที่มีสตริงที่แน่นอน ตัวอย่างเช่นดู syslog ของฉันโดยไม่มี[UFW BLOCK]
บรรทัดรายการUFW ( )
ค้นหาโปรแกรมเช่นtail
หรือless
ที่ให้ฉันดูบันทึกของฉันไม่มีบรรทัดที่มีสตริงที่แน่นอน ตัวอย่างเช่นดู syslog ของฉันโดยไม่มี[UFW BLOCK]
บรรทัดรายการUFW ( )
คำตอบ:
ตัวเลือกรูปแบบการจับคู่แบบผกผัน-v
สำหรับgrep
มีประโยชน์กับสิ่งนี้:
grep -v 'UFW BLOCK' /var/log/syslog
UFW BLOCK
นี้จะแสดงให้คุณทุกสายไม่ได้มี ในฐานะที่เป็นgrep
การแสดงออกปกติการใช้งานขั้นพื้นฐานโดยค่าเริ่มต้นรวมของวงเล็บจะทำให้ค้นหาใด ๆ ของตัวละครแต่ละ 'UFW BLOCK รวมทั้งพื้นที่ คุณอาจท้ายไม่มีผลลัพธ์ หากคุณต้องการให้แน่ใจว่ามีวงเล็บอยู่รอบ ๆ สตริงไม่ว่าจะใช้ Escape \[UFW BLOCK\]
หรือใช้-F
ตัวเลือกgrep
เพื่อรวมเฉพาะสตริงคงที่ (ขอบคุณZannaและSteeldriverสำหรับคำแนะนำในเรื่องนี้):
grep -Fv '[UFW BLOCK]' /var/log/syslog
คุณสามารถทำให้การดูง่ายขึ้นโดยการวางเอาต์พุตไปยังเพจเจอร์เช่นless
:
grep -v 'UFW BLOCK' /var/log/syslog | less
หรือเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ในโฮมไดเร็กตอรี่ของคุณเพื่อดูในภายหลัง:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
fgrep
คำสั่งที่เทียบเท่าgrep -F
ได้
นอกจากนี้คุณยังสามารถใช้sed
เป็นd
คำสั่งเพื่อลบเส้นที่มีรูปแบบจากลำธารที่:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
เราหลบหนี[]
ตามปกติพวกเขาแสดงคลาสตัวละครความหมาย "จับคู่สิ่งที่อยู่ภายในที่นี่"
คุณสามารถใช้เครื่องมือใดก็ได้ที่มีความสามารถในการแก้ไข คุณได้รับการแก้ปัญหาโดยใช้grep
แล้วและsed
นี่คือตัวเลือกอื่น ๆ ทั้งหมดเหล่านี้ได้อย่างง่ายดายสามารถประปาless
หรือmore
หรือสิ่งอื่นใด
Perl
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
ตั้งแต่นี้คือ Perl TIMTOWDI! .
perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
awk
awk '!/\[UFW BLOCK\]/' file
คุณสามารถใช้awk
:
awk '!/PATTERN/' log
ฉันใช้เมื่อฉันมี "รูปแบบ" มากกว่าหนึ่งรูปแบบและฉันไม่ต้องการใช้สองรูปgrep
แบบ:
... | grep -v foo | grep -v bar
ซึ่งไวยากรณ์คือ:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"
?
-e
เพื่อกำหนดหลายรูปแบบ grep -v -e 'foo' -e 'bar'
ด้วยตัวเลือกless
ของคำสั่ง&
คุณสามารถกรองเพื่อแสดงรูปแบบการจับคู่ที่ต้องการได้ดังนี้
& /PATTERN/
ในกรณีของคุณหากคุณต้องการให้ตัวกรองบรรทัดUFW BLOCK
ไม่แสดงในเอาต์พุตคุณสามารถใช้&!
ดังต่อไปนี้:
&! /UFW BLOCK/
less
มีความเป็นไปได้ที่จะกรองบรรทัดที่แสดงหลังจากรูปแบบ regex คุณสามารถใช้คุณสมบัตินี้โดยการพิมพ์&
ตามด้วยรูปแบบและคุณสามารถเปลี่ยนกลับได้โดยพิมพ์&
เพียงอย่างเดียว