我需要将变量扩展为sed表达式,但变量值是包含$
的变量名。
要清理的行,它是第一行(对于$otheVarNameN
,第一行更改了几行失败):
<?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
当我尝试修改代码以在for循环中传递变量名时:
sed -i.bak -E "s/(<\?php ${hack}.*\(?>)(<\?php)/\2/" hack.php
sed -i.bak -E "s/(<\?php \$${hack}.*\(?>)(<\?php)/\2/" hack.php
答案 0 :(得分:1)
使用shell参数扩展运算符执行字符串替换,将\$
替换为hack='$someNameVar'
sed -i.bak -E "s/(<\?php ${hack//$/\\$}.*\(?>)(<\?php)/\2/" hack.php
。
${parameter/pattern/string}
来自Bash Manual:
/
扩展模式以生成模式,就像在文件名扩展中一样。 参数已展开, pattern 与其值的最长匹配将替换为 string 。如果模式以Event
开头,则 pattern 的所有匹配项都将替换为 string 。