Tôi đang chuyển một danh sách các mẫu biểu thức chính quy grep
để kiểm tra tệp syslog. Chúng thường khớp với một địa chỉ IP và mục nhập nhật ký;
grep "1\.2\.3\.4.*Has exploded" syslog.log
Đây chỉ là một danh sách các mẫu như "1\.2\.3\.4.*Has exploded"
phần tôi đang vượt qua, trong một vòng lặp, vì vậy tôi không thể vượt qua "-v" chẳng hạn.
Tôi bối rối khi cố gắng thực hiện nghịch đảo ở trên, một dòng KHÔNG khớp với một địa chỉ IP nhất định và lỗi vì vậy "! 1.2.3.4. * Đã phát nổ" sẽ khớp với các dòng syslog cho bất cứ điều gì khác ngoài 1.2.3.4 cho tôi biết nó đã phát nổ . Tôi phải có thể bao gồm một IP để KHÔNG khớp.
Tôi đã thấy nhiều bài viết tương tự trên StackOverflor tuy nhiên họ sử dụng các mẫu regex mà tôi dường như không thể làm việc được grep
. Bất cứ ai có thể cung cấp một ví dụ làm việc cho grep
xin vui lòng?
CẬP NHẬT: Điều này đang xảy ra trong một kịch bản như thế này;
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"
thay đổi patterns[3]="(?<!9\.10\.11\.12).*Has exploded"
và grep "${patterns[$i]}" logfile.log
thay đổi đối với grep -P "${patterns[$i]}" logfile.log
PCRE mặc định giả định nhiều siêu ký tự hơn, do đó, một số lối thoát có thể cần phải được xóa khỏi các biểu thức khớp khác.