php - 双引号在 PHP 的 shell_exec 和 sed 中不断被解析

标签 php bash sed

我花了几个小时试图解决这个问题。我正在使用 shell_exec(是的,我知道与此相关的安全问题)并使用 sed 来更改文件中的文本。

问题是无论我尝试什么,我似乎都无法输出引号仍然完整的文本。我已经尝试了几乎每一种单引号和双引号的组合来逃避它,但它没有奏效。经过几个小时的尝试,我决定在这里问这个问题。

代码在 PHP 文件中:

shell_exec('sed -i "s/patterntoreplace/yolo(word,"Hello Everyone", word)/" test.txt

问题是文件以:

结尾
yolo(word,Hello Everyone, word)

引用不断被解析,我绝对需要它们。我尝试了各种方法,例如将它放入变量中,使用 escapeshellargescapeshellcmd 并尝试了单引号和双引号的各种组合,但我仍然无法让它工作.

这让我非常沮丧,因为这是我项目的最后一部分,它应该很简单,但我无法在没有引号的情况下运行我的程序。真是气死人了。

有人可以告诉我在该命令中要替换什么以使引号正确输出吗?

最佳答案

这应该有效:

$arg = 's/patterntoreplace/yolo(word,"Hello Everyone", word)/';
$cmd = 'sed -i '.escapeshellarg($arg).' test.txt';
shell_exec($cmd);

关于php - 双引号在 PHP 的 shell_exec 和 sed 中不断被解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516585/

相关文章:

php - 用逗号连接多行上的多个字段

php - 计算剩余天数

Bash for - 条件变量

python - Airflow 中的动态任务定义

bash - bash 脚本中的 Sed 不工作 : But it works on command line

regex - 按缩进模式处理文本文件

php - 如何将 preg_replace e 转换为 preg_replace_callback?

php - Ajax 和 PHP : MySQL Query Not Fetching Any Rows

linux - 如何将查找的输出分配到数组中

linux - Linux 中的 sed。很多括号和斜线