grep和perl正则表达式之间的区别?

Eri*_*lja 7 regex perl grep

我有一个问题,我认为grep的正则表达式和perl的正则表达式有所不同.考虑以下小测试:

$ 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
Run Code Online (Sandbox Code Playgroud)

如您所见,使用正则表达式"SOME_RULE\s*=\s*\$(BIN)",grep可以找到匹配项,但perl无法使用相同的表达式更新文件.我该如何解决这个问题?

感谢您提前阅读并感谢您的帮助,感激不尽!

Wil*_*ell 6

Perl希望转义'('和')'。另外,shell在'$'上吃掉'\',因此您需要:

$ perl -p -e“ s / SOME_RULE \ s * = \ s * \\ $ \(BIN \)/ Hello / g” testfile.txt

(或使用单引号-在任何情况下都建议使用。)