ฉันกำลังส่งรายการรูปแบบ 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.log
PCRE จะถือว่า metacharacters มากขึ้นตามค่าเริ่มต้นดังนั้นการหลบหลีกบางอย่างอาจต้องถูกเอาออกจากนิพจน์การจับคู่อื่น ๆ