2017-02-04 3 views
0

変数をsed式に展開する必要がありますが、変数の値は$を含む変数名です。 、それは最初の行(この最初の行は$otheVarNameNため、失敗したいくつかに変更)きれいにするsed式で変数を展開する

ラインです:

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

私はこのコードを試みたが、私は変数名やエスケープを使用している場合、それが正常に動作します$

$hack = "$someNameVar" 

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

私はループの中で変数名を渡すようにコードを変更しよう:

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

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

システムがハッキングされているようです。これらの変数をコードに挿入してセキュリティホールを修正し、システムを再インストールできる理由を調べる必要があります。 – hek2mgl

答えて

1

$\$に置き換えるには、シェルパラメータ展開演算子を使用して文字列置換を実行します。 Bash Manualから

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

${parameter/pattern/string}
パターンは、単にファイル名の拡張と同様のパターンを生成するように拡張されます。 パラメータが展開され、その値に対してパターンの最長一致が文字列に置き換えられました。パターンが/で始まる場合、パターンのすべてが文字列に置き換えられます。