Przekazuję listę wzorców wyrażeń regularnych grepdo sprawdzenia w pliku syslog. Zazwyczaj odpowiadają one adresowi IP i wpisowi do dziennika;
grep "1\.2\.3\.4.*Has exploded" syslog.log
To tylko lista wzorców, takich jak "1\.2\.3\.4.*Has exploded"część, którą mijam, w pętli, więc nie mogę na przykład przekazać „-v”.
Jestem zdezorientowany, próbując wykonać odwrotność powyższego, NIE dopasuj wierszy z pewnym adresem IP i błędem, więc „! 1.2.3.4. * Eksplodował” dopasuje wiersze syslog dla czegoś innego niż 1.2.3.4, mówiąc mi, że wybuchł . I musi być w stanie jak IP, aby nie odpowiadać.
Widziałem różne podobne posty na StackOverflor, jednak używają wzorców wyrażeń regularnych, z którymi wydaje mi się, że nie mogę z nimi pracować grep. Czy ktoś może podać działający przykład grep?
AKTUALIZACJA: Dzieje się tak w takim skrypcie;
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"zmiany patterns[3]="(?<!9\.10\.11\.12).*Has exploded"i grep "${patterns[$i]}" logfile.logzmiany w grep -P "${patterns[$i]}" logfile.logPCRE domyślnie zakładają więcej metaznaków, więc niektóre znaki specjalne mogą wymagać usunięcia z innych pasujących wyrażeń.