2017-03-07 181 views
0

我有以下内容转义双引号命令提示符

$(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 

但我只是得到了以下电子RROR

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

看看这个[quotemeta](http://perldoc.perl.org/functions/quotemeta.html),可能是这可以解决你的问题! – AbhiNickz

+0

[我如何在字符串中插入特殊字符,我插入到Perl正则表达式中?]可能的副本(http://stackoverflow.com/questions/2156731/how-do-i-escape-special-chars-in-a -string-I-内插成 - 一个-perl的正则表达式) – AbhiNickz

回答

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