ฉันกำลังส่งรายการรูปแบบ regex ไปgrepยังเพื่อตรวจสอบกับไฟล์ syslog พวกเขามักจะตรงกับที่อยู่ IP และบันทึกรายการ;
grep "1\.2\.3\.4.*Has exploded" syslog.log
มันเป็นรายการของรูปแบบที่เหมือนกับ"1\.2\.3\.4.*Has exploded"ตอนที่ฉันผ่านเป็นวงดังนั้นฉันไม่สามารถผ่าน "-v" ได้
ฉันสับสนที่พยายามทำผกผันของด้านบนบรรทัดที่ไม่ตรงกับที่อยู่ IP และข้อผิดพลาดบางอย่างดังนั้น "! 1.2.3.4. * มีการระเบิด" จะจับคู่สาย syslog สำหรับสิ่งอื่นที่ไม่ใช่ 1.2.3.4 บอกฉันว่ามันระเบิด . ฉันจะต้องรวม IP เพื่อไม่ให้ตรงกัน
ฉันได้เห็นโพสต์ที่คล้ายกันมากมายใน StackOverflor แต่พวกเขาใช้รูปแบบ regex ที่ฉันไม่สามารถใช้งานgrepได้ ทุกคนสามารถให้ตัวอย่างที่ใช้งานได้เพื่อgrepโปรด
UPDATE: สิ่งนี้เกิดขึ้นในสคริปต์เช่นนี้
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
patterns[3]="\!9\.10\.11\.12.*Has exploded"การเปลี่ยนแปลง patterns[3]="(?<!9\.10\.11\.12).*Has exploded"และgrep "${patterns[$i]}" logfile.logการเปลี่ยนเป็น grep -P "${patterns[$i]}" logfile.logPCRE จะถือว่า metacharacters มากขึ้นตามค่าเริ่มต้นดังนั้นการหลบหลีกบางอย่างอาจต้องถูกเอาออกจากนิพจน์การจับคู่อื่น ๆ