Php “sed命令的单引号/双引号转义”问题的另一个变体

Php “sed命令的单引号/双引号转义”问题的另一个变体,php,sed,escaping,Php,Sed,Escaping,以下两行PHP工作正常: exec("/bin/sed --in-place 's/_SINGLE_QUOTE_HERE_/SQ/' " . $fileSpec); exec("/bin/sed --in-place 's/_DOUBLE_QUOTE_HERE_/DQ/' " . $fileSpec); 因此,如果文件包含以下文本: I am 6_SINGLE_QUOTE_HERE_ 4_DOUBLE_QUOTE_HERE_ tall. 执行上述代码后,文件将包含: I am 6SQ 4DQ

以下两行PHP工作正常:

exec("/bin/sed --in-place 's/_SINGLE_QUOTE_HERE_/SQ/' " . $fileSpec);
exec("/bin/sed --in-place 's/_DOUBLE_QUOTE_HERE_/DQ/' " . $fileSpec);
因此,如果文件包含以下文本:

I am 6_SINGLE_QUOTE_HERE_ 4_DOUBLE_QUOTE_HERE_ tall.
执行上述代码后,文件将包含:

I am 6SQ 4DQ tall.
但是,很明显,我想要:

I am 6' 4" tall.
问题是,单引号/双引号本身会把事情搞砸

我尝试过这个,但失败了:

exec("/bin/sed --in-place 's/_SINGLE_QUOTE_HERE_/\x27/' " . $fileSpec);
exec("/bin/sed --in-place 's/_DOUBLE_QUOTE_HERE_/\x22/' " . $fileSpec);
我也尝试过,但也失败了:

exec("/bin/sed --in-place 's/_SINGLE_QUOTE_HERE_/\'/' " . $fileSpec);
exec("/bin/sed --in-place 's/_DOUBLE_QUOTE_HERE_/\"/' " . $fileSpec);
提前感谢您提供此问题的解决方案

编辑:添加以下内容

好的,这适用于单报价:

exec("/bin/sed --in-place 's/_SINGLE_QUOTE_HERE_/'\''/g' " . $program);
仍然有双重报价的问题。这不起作用:

exec("/bin/sed --in-place 's/_DOUBLE_QUOTE_HERE_/'\"'/g' " . $program);

为了避免引用问题,您考虑过:exec/bin/sed-in-place-file=/path/to/script$文件规范;在/path/to/script的何处有原始sed命令?这是一个绝妙的主意——我很高兴尝试它——但它也失败了为了清楚起见,我首先在单独的文件中使用sed命令进行了测试:s/\u DOUBLE\u QUOTE\u HERE\u/DQ/这是有效的,但是当我使用s/\u DOUBLE\u QUOTE\u HERE\u/\/时失败了。所以,它并没有避免引用的问题。我只是测试了它,它对我有效,无论是否在单引号或双引号之前进行转义。我使用的是GNU sed版本4.2.1。你是在非GNU系统上吗?顺便说一句,我在这里用了s/_SINGLE _QUOTE)/g和g。否则,每行只进行一次替换。John,我刚刚检查过,我使用的是GNU sed版本4.2.1。啊。我几乎没有头发要拔了。让我重新看一看。