I have a problem with what I think is a difference in grep’s regex and perl’s regex. Consider the following little test:
$ cat testfile.txt
A line of text
SOME_RULE = $(BIN)
Another line of text
$ grep "SOME_RULE\s*=\s*\$(BIN)" testfile.txt
SOME_RULE = $(BIN)
$ perl -p -e "s/SOME_RULE\s*=\s*\$(BIN)/Hello/g" testfile.txt
A line of text
SOME_RULE = $(BIN)
Another line of text
As you can see, using the regex "SOME_RULE\s*=\s*$(BIN)", grep could find the match, but perl was unable to update the file using the same expression. How should I solve this problem?
Perl wants the ‘(‘ and ‘)’ to be escaped. Also, the shell eats the ‘\’ on the ‘$’, so you need:
(or use single quotes–which is highly advisable in any case.)