I am passing a list of regex patterns to grep
to check against a syslog file. They are usually matching an IP address and log entry;
grep "1\.2\.3\.4.*Has exploded" syslog.log
It's just a list of patterns like the "1\.2\.3\.4.*Has exploded"
part I am passing, in a loop, so I can't pass "-v" for example.
I am confused trying to do the inverse of the above, and NOT match lines with a certain IP address and error so "!1.2.3.4.*Has exploded" will match syslog lines for anything other than 1.2.3.4 telling me it has exploded. I must be able to include an IP to NOT match.
I have seen various similar posts on StackOverflow. However they use regex patterns that I can't seem to get to work with grep
. Can anyone provide a working example for grep
please?
UPDATE: This is happening in a script like this;
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"
changes topatterns[3]="(?<!9\.10\.11\.12).*Has exploded"
andgrep "${patterns[$i]}" logfile.log
changes togrep -P "${patterns[$i]}" logfile.log
PCRE assumes more metacharacters by default, so some of the escapes may need to be removed from other matching expressions. – Codex24