Tôi đang chuyển danh sách các mẫu regex đến grep
để kiểm tra đối với tệp nhật ký hệ thống. Chúng thường khớp với địa chỉ IP và mục nhập nhật ký;Grep regex NOT contains string
grep "1\.2\.3\.4.*Has exploded" syslog.log
Nó chỉ là một danh sách các mẫu như "1\.2\.3\.4.*Has exploded"
phần tôi đi qua, trong vòng một, vì vậy tôi không thể vượt qua "-v" chẳng hạn.
Tôi đang bối rối khi cố gắng làm ngược lại ở trên, một đường không khớp với một địa chỉ IP và lỗi nhất định để "! 1.2.3.4. * Đã phát nổ" sẽ khớp với các dòng syslog cho bất kỳ điều gì khác hơn 1.2.3.4 tôi nó đã phát nổ. Tôi phải có thể bao gồm IP để KHÔNG khớp.
Tôi đã thấy các bài đăng tương tự khác nhau 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 với 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 xảy ra trong một tập lệnh 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
Bạn có nghĩa là bạn * đôi khi * muốn để phù hợp với một mô hình, nhưng đôi khi muốn để phù hợp với tất cả mọi thứ trừ * * một mô hình nào đó? (điều này có vẻ như một yêu cầu kỳ quặc, nhưng bất cứ điều gì). Trong trường hợp đó, tại sao bạn không lặp qua hai danh sách mẫu khác nhau? – beerbajay
Tôi cũng không am hiểu về regex; Tôi không muốn grep cho "Đã nổ" bởi vì tôi không muốn biết điều này về mọi thiết bị khai thác gỗ, vì vậy tôi có thể bằng cách nào đó grep cho "Đã nổ" và! 9,10,11,12 trong một tuyên bố? – jwbensley
Nếu bạn hoàn toàn phải làm điều đó trong một tuyên bố, thì những cái nhìn tiêu cực là cách để đi, như Neil gợi ý. Xem bình luận của tôi ở đó. – beerbajay