PHP执行()使用Sed给出奇怪的结果
问题描述:
我有一个完整的文件路径列表。所有完整的文件路径看起来像“/ dir1/dir2/dir3/s ..”。我想彻底删除s。从文件名。文件名有可能是复数,例如s.asdfs.cpp。我不想删除秒的第二次发生。因为这是实际文件名的一部分,而不是列表中每个完整文件路径中的重复主题。PHP执行()使用Sed给出奇怪的结果
跑在外壳的作品下面,我希望它:
echo /dir1/dir2/dir3/s.filenames.cpp | sed 's#\(.*\)\/s\.\([^\/]*\)#\1\/\2#g'
给出了期望的结果:
/dir1/dir2/dir3/filenames.cpp
但是,如果我跑在PHP如下:
$formatted_filename = exec("echo ".$filename." | sed 's#\(.*\)\/s\.\([^\/]*\)#\1\/\2#g'");
其中
$filename = /dir1/dir2/dir3/s.filenames.cpp;
然后在我的bash shell中运行
php -q script_name_that_contains_command_above.php > test.html
,并刷新显示的test.html我得到非常奇怪的结果我的Firefox浏览器。在地方,这些修改的文件路径应列出我得到
<strange box>/<strange box>
其中
<strange box>
是2行2列由0的除了右下角细胞的小盒子。第一次出现在右下角的单元格中有1,第二次出现在右下角的单元格中有2。
sed命令有效,但php或exec命令正在解释它我认为不正确。有任何想法吗?
你为什么不使用PHP的正则表达式? – 2012-02-02 14:16:29
我对PHP很新颖。你在暗示preg_match函数吗? – halexh 2012-02-02 14:21:31
对于不可打印的字符,“奇怪的盒子”可能是“未知字符”字形字形。可能是null(ascii 0)。 – 2012-02-02 14:25:02