![sed 在 SSH 中运行正常,但在 PHP 中却不行](https://linux22.com/image/534252/sed%20%E5%9C%A8%20SSH%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E6%AD%A3%E5%B8%B8%EF%BC%8C%E4%BD%86%E5%9C%A8%20PHP%20%E4%B8%AD%E5%8D%B4%E4%B8%8D%E8%A1%8C.png)
因此,我在 PHP 中使用 exec($addPHPtags) 运行以下行;
$addPHPtags = "/bin/sed -i '/<BODY BGCOLOR=\"#FFFFFF\">/ a\ <?php \n ?> '" . $instance['file'] . " 2>&1";
我希望该命令能找到密钥并将其附加到 php 标记中。但是,当我在 PHP 中运行它时,如果我捕获命令输出,则会收到以下错误:
[0] => /bin/sed: -e expression #1, char 39: unknown command: `?'
但是,如果我在 SSH 中运行相同的命令,它可以完全正常工作:
/bin/sed -i '/<BODY BGCOLOR=\"#FFFFFF\">/ a\ <?php \n ?>' file.php
我没什么主意了,我尝试了各种替代方案,但都无济于事。有什么帮助吗?谢谢。
答案1
/bin/sed/ -i '/<BODY BGCOLOR="#FFFFFF">/ a\ <?php \n ?> 'INPUTFILE` 2>&1
请注意,正则表达式和输入文件之间缺少一个空格。
$addPHPtags = "/bin/sed -i '/<BODY BGCOLOR=\"#FFFFFF\">/ a\ <?php \n ?> '" . $instance['file'] . " 2>&1";
# ^^
在 PHP 中放置一个空格,我认为这样可能没问题...然后双击换行符。你为什么不直接在 PHP 中进行转换?
答案2
您可能需要对换行符进行两次转义。尝试:
$addPHPtags = "/bin/sed -i '/<BODY BGCOLOR=\"#FFFFFF\">/ a\ <?php \\n ?> '" . $instance['file'] . " 2>&1";