我花了好几个小时试图解决这个问题。我正在使用shell_exec
(是的,我知道与此相关的安全问题)并且sed更改文件中的文本。
问题是无论我尝试什么,我似乎无法输出引号仍然完整的文本。我已经尝试了几乎所有单引号和双引号的组合,我可以逃避它,但它没有奏效。经过几个小时的尝试,我决定在这里提出这个问题。
代码在PHP文件中:
shell_exec('sed -i "s/patterntoreplace/yolo(word,"Hello Everyone", word)/" test.txt
问题是该文件以:
结尾yolo(word,Hello Everyone, word)
引号一直被解析,我绝对需要它们。我尝试了各种各样的事情,例如将它放入变量,使用escapeshellarg
和escapeshellcmd
并尝试单引号和双引号的各种组合,但我仍然无法使其工作。
这对我来说非常令人沮丧,因为这是我项目的最后一部分,它应该很简单,但我不能在没有引号的情况下运行我的程序。这真是令人生气。
有人可以告诉我在该命令中要替换什么来获得正确输出的报价吗?
答案 0 :(得分:1)
这应该有效:
$arg = 's/patterntoreplace/yolo(word,"Hello Everyone", word)/';
$cmd = 'sed -i '.escapeshellarg($arg).' test.txt';
shell_exec($cmd);
答案 1 :(得分:0)
您是否曾尝试使用\'
代替'
和\"
而不是"
,而您不打算对其进行解析?他们已经说过了! :)
答案 2 :(得分:0)
这可以而且应该用PHP完成,不需要sed
:
$filename = 'test.txt';
$pattern = 'patterntoreplace';
$replace = 'yolo(word,"Hello Everyone", word)';
$lines = [];
foreach(file($filename) as $line) {
$lines []= preg_replace($pattern, $replace, $line);
}
file_put_contents($filename, join("", $lines));