在php中执行multiline sed:转义问题

时间:2011-02-15 18:22:13

标签: php regex parsing sed

我正在尝试运行sed进行多行搜索并替换为以下字符串

$test = "sed -n '1h;1!H;${;g;s/iname=\"".$name.".*item>/".trim(xml)."/g;p;}' ".$file;
exec($test,$cmdresult);

sed是选择,因为要搜索的字符串超过10 MB。

在执行期间,编译器会发出警告

PHP Parse error:  syntax error, unexpected ';' 

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您需要转义$中的${}

$test = "sed -n '1h;1!H;\${;g;s/iname=\"".$name.".*item>/".trim(xml)."/g;p;}' ".$file;
exec($test,$cmdresult);

但是,为了让人们阅读您的代码,您应该真正地分割字符串。通过连接其他字符串sprintf或HEREDOC来创建它。

答案 1 :(得分:0)

$变量中的$test符号可能会让PHP认为还有另一个应该扩展的变量。

尝试转义$字符(\$),并查看relevant PHP strings doc