Forum: Cfengine Help
Subject: Re: regex help
Author: sauer
Link to topic: https://cfengine.com/forum/read.php?3,21705,21713#msg-21713

The negative lookbehind is zero-width, so you need the rest of the pattern 
around it to match a complete line if the zero-width piece was removed.  That's 
the hardest part for people to remember, it seems - you basically have to match 
the zero-width part twice.  Therefore, you proably want something like this 
(truncated with a .* for my convenience)


(:?\S+\s+){5}(?<!00 3 1 \* \*\s)\s*/usr/scripts.*


So you have a pattern which says the line starts with five space-separated 
non-space fields, and that's followed by "your path which was not preceeded by 
your desired pattern."  You might need a \s* at the beginning as well, 
depending on whether or not a line starting with space is ok.  I forget.

I used \s)\s* at the end of the lookbehind pattern because you can't have a 
variable-width lookbehind in perl, but it should probably work regardless of 
the amount of whitespace.  Here's proof that the idea works. ;)


user@host 
$ cat /tmp/file
1 2 3 4 5 hello world
1 2 4 4 5 hello world
user@host 
$ perl -nle'print if /^(:?\S+\s+){5}(?<!1 2 3 4 5\s)\s*hello/' /tmp/file
1 2 4 4 5 hello world


_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to