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 grepxin 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
donepatterns[3]="\!9\.10\.11\.12.*Has exploded"thay đổi   patterns[3]="(?<!9\.10\.11\.12).*Has exploded"và grep "${patterns[$i]}" logfile.logthay đổi đối với   grep -P "${patterns[$i]}" logfile.logPCRE 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.