2017-03-07 1 views
0

Ich habe eine Datei mit folgendem InhaltEscaping doppelte Anführungszeichen in der Windows-Eingabeaufforderung

$(CP) "$(O_SSL)" "$(INSTALLTOP)\bin" 
$(CP) "$(O_CRYPTO)" "$(INSTALLTOP)\bin" 

ich die folgenden Zeilen hinzufügen möchten (Reihenfolge spielt keine Rolle)

$(CP) "$(SSL).pdb" "$(INSTALLTOP)\bin" 
$(CP) "$(CRYPTO).pdb" "$(INSTALLTOP)\bin" 

So, mit perl, habe ich den folgenden Befehl ein (die von der Eingabeaufforderung ausgeführt werden muss):

perl -pi.bak -e 's#\t\$\(CP\) "\$\(O_([^)]+)\)" "\$\(INSTALLTOP\)\\bin"#$&\n\t\$(CP) "\$($1).pdb" "\$(INSTALLTOP)\\bin#g' ntdll.mak 

aber bekomme ich nur die folgende E rror

Can't find string terminator "'" anywhere before EOF at -e line 1. 
The system cannot find the path specified. 

habe ich versucht, die einfachen Anführungszeichen mit doppelten Anführungszeichen zu ersetzen (und die Verdoppelung alle internen doublequotes) als so

perl -pi.bak -e "s#\t\$\(CP\) ""\$\(O_([^)]+)\)"" ""\$\(INSTALLTOP\)\\bin""#$&\n\t\$(CP) ""\$($1).pdb"" ""\$(INSTALLTOP)\\bin""#g" ntdll.mak 

aber bekomme ich nur die folgende Fehlermeldung statt

Substitution pattern not terminated at -e line 1. 

Wie sollte Ich mache das? (... Ich will keine separate Skriptdatei erstellen, aber ich werde es tun, wenn es gibt keine andere (vernünftig) Art und Weise)

+0

In diesem [quitemeta] (http://perldoc.perl.org/functions/quoteemeta.html), könnte dies Ihr Problem lösen könnte! – AbhiNickz

+0

Mögliches Duplikat von [Wie entkomme ich speziellen Zeichen in einer Zeichenfolge, die ich in eine Perl-Regex interpoliere?] (Http://stackoverflow.com/questions/2156731/how-do-i-escape-special-chars-in-a- -string-i-interpolieren-in-ein-Perl-Regex) – AbhiNickz

Antwort

0

ich, um das Problem arbeitete von Oktal mit entkommt für wörtliche doublequotes

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 
Verwandte Themen