ค้นหาโปรแกรมเช่น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 คุณสามารถใช้คุณสมบัตินี้โดยการพิมพ์&ตามด้วยรูปแบบและคุณสามารถเปลี่ยนกลับได้โดยพิมพ์&เพียงอย่างเดียว