我有一个包含以下内容的文件
$(CP) "$(O_SSL)" "$(INSTALLTOP)\bin"
$(CP) "$(O_CRYPTO)" "$(INSTALLTOP)\bin"
我想添加以下几行(顺序无关紧要)
$(CP) "$(SSL).pdb" "$(INSTALLTOP)\bin"
$(CP) "$(CRYPTO).pdb" "$(INSTALLTOP)\bin"
因此,使用perl,我创建了以下命令(必须从命令提示符运行):
perl -pi.bak -e 's#\t\$\(CP\) "\$\(O_([^)]+)\)" "\$\(INSTALLTOP\)\\bin"#$&\n\t\$(CP) "\$($1).pdb" "\$(INSTALLTOP)\\bin#g' ntdll.mak
但我收到以下错误
Can't find string terminator "'" anywhere before EOF at -e line 1.
The system cannot find the path specified.
我尝试用双引号替换单引号(并将所有内部双引号加倍),所以
perl -pi.bak -e "s#\t\$\(CP\) ""\$\(O_([^)]+)\)"" ""\$\(INSTALLTOP\)\\bin""#$&\n\t\$(CP) ""\$($1).pdb"" ""\$(INSTALLTOP)\\bin""#g" ntdll.mak
但我只是得到以下错误
Substitution pattern not terminated at -e line 1.
我该怎么做? (...我不想创建一个单独的脚本文件,但是如果没有其他(合理的)方法我就会这样做)
答案 0 :(得分:0)
我通过对文字双引号使用八进制转义来解决这个问题
perl -pi.bak -e "s#\t\$\(CP\) \042\$\(O_([^)]+)\)\042 \042\$\(INSTALLTOP\)\\bin\042#$&\n\t\$(CP) \042\$(LIB_D)\\\$($1).pdb\042 \042\$(INSTALLTOP)\\bin\042#g" ntdll.mak