Przekazuję listę wzorców wyrażeń regularnych grep
do 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.log
zmiany w grep -P "${patterns[$i]}" logfile.log
PCRE domyślnie zakładają więcej metaznaków, więc niektóre znaki specjalne mogą wymagać usunięcia z innych pasujących wyrażeń.