我花了几个小时试图解决这个问题。我正在使用shell_exec
(是的,我知道与此相关的安全问题)和SED更改文件中的文本。
问题是不管我尝试什么,我似乎都无法输出文字,引号仍然完好无损。我已经尝试了几乎所有可以逃脱的单句和双引号的组合,但它没有奏效。经过数小时的尝试,我决定在这里提出问题。
代码在PHP文件中:
shell_exec('sed -i "s/patterntoreplace/yolo(word,"Hello Everyone", word)/" test.txt
问题是文件最终以:
yolo(word,Hello Everyone, word)
报价不断解析,我绝对需要它们。我尝试了使用escapeshellarg
和escapeshellcmd
并尝试各种单引号和双引号组合,例如将其放入变量,但我仍然无法使其工作。
这对我来说非常令人沮丧,因为这是我项目的最后一部分,它应该很简单,但是没有报价,我无法运行程序。这很令人发指。
有人可以告诉我该命令中要替换的内容以获取正确输出的报价吗?
这应该有效:
$arg = 's/patterntoreplace/yolo(word,"Hello Everyone", word)/';
$cmd = 'sed -i '.escapeshellarg($arg).' test.txt';
shell_exec($cmd);
这可以并且应该使用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));
您可以使用斜杠再次使用内部的引号,但是只要牢记内部引号
// have added slashes to Hello Everyone
shell_exec('sed -i "s/patterntoreplace/yolo(word,"Hello Everyone", word)" test.txt')
您是否尝试过使用'
而不是'
和"
而不是"
,而不是在其中不被解析它们?他们已经说了!:)