Positive/Negative lookahead with grep and perl
bash, grep, perl, regex, regex-lookarounds
Solution
grep does not include the newline in the string it checks against the regex, so `abc\s` does not match when abc is at the end of the line. chomp in perl or use the -l command line option and you will see similar results.
I'm not sure why you were making other changes between the perl and grep regexes; what was the `(?)` supposed to accomplish?
Problem
My login.txt file contains the following entries: ``` abc def abc 123 def abc abc de tha ewe ``` When I do a positive lookahead using perl, I get the following result: ``` > cat login.txt | perl -ne 'print if /(?)abc\s(?=def)/' abc def ``` ...when I use grep, I get the following result: ``` > cat login.txt | grep -P '(?<=abc)\s(?=def)' abc def ``` Negative lookahed results as follows from perl...: ``` > cat login | perl -ne 'print if /(?)abc\s(?!def)/' abc 123 def abc abc de ``` ...and the grep result: ``` > cat login.txt | grep -P '(?<=abc)\s(?!def)' abc 123 abc de ``` perl matched the `def abc` for the negative lookahead. but it shouldn't have matched `def abc`, as I'm checking `abc` then `def` pattern; whereas grep returns the correct result. Is something missing in my perl pattern?