在sed表达式中展开变量

时间:2017-02-04 17:24:46

标签: regex sed

我需要将变量扩展为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

1 个答案:

答案 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