2017-02-04 7 views
0

Ich muss eine Variable in einen sed-Ausdruck expandieren, aber der Variablenwert ist ein Variablenname einschließlich $.Variable in sed-Ausdruck erweitern

Linie zu reinigen, es ist die erste Zeile (und diese erste Zeile wechselt auf mehreren fehlschlägt, für $otheVarNameN):

<?php $someNameVar = '27tfs%6<*17-SFEBFI,6<*127-UVPFNJU,6<... more code ... ?><?php 

ich diesen Code versucht, und es funktioniert gut, wenn ich den Namen der Variablen und escape verwenden $:

$hack = "$someNameVar" 

// I need use $hack var for expanded, work how line below 
sed -i.bak -E "s/(<\?php \$someNameVar.*\(?>)(<\?php)/\2/" hack.php 

Wenn ich versuche, den Code zu ändern, die Variablennamen für Schleife in einer weitergeben müssen:

sed -i.bak -E "s/(<\?php ${hack}.*\(?>)(<\?php)/\2/" hack.php 

sed -i.bak -E "s/(<\?php \$${hack}.*\(?>)(<\?php)/\2/" hack.php 
+0

Sieht aus wie Ihr System gehackt wurde. Sie müssen herausfinden, warum sie diese Variablen in den Code einfügen konnten, die Sicherheitslücke schließen und das System neu installieren. – hek2mgl

Antwort

1

Verwenden Sie den Shell-Parameter-Erweiterungsoperator, um einen String-Austausch durchzuführen, um $ durch zu ersetzen.

hack='$someNameVar' 
sed -i.bak -E "s/(<\?php ${hack//$/\\$}.*\(?>)(<\?php)/\2/" hack.php 

Vom Bash Manual:

${parameter/pattern/string}
Die Muster wird erweitert, um ein Muster zu erzeugen, wie in Dateinamen Expansion. Parameter wird erweitert und die längste Übereinstimmung von Muster gegen seinen Wert wird durch Zeichenfolge ersetzt. Wenn das Muster mit / beginnt, werden alle Übereinstimmungen von Muster durch Zeichenfolge ersetzt.