我有一个完整文件路径列表。所有完整文件路径看起来都像“/ dir1 / dir2 / dir3 / s ..”。我想完全删除s。从文件名。文件名可能是复数,例如s.asdfs.cpp。我不想删除s的第二次出现。因为这是实际文件名的一部分,而不是列表中每个完整文件路径中的重新创建主题。
在shell中运行以下代码可以按照我的要求运行:
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组成。第一次出现在右下角的单元格中有一个,第二次出现在右下角的单元格中有一个。
sed命令有效,但是php或者exec命令正在解释它我不相信。有什么想法吗?
答案 0 :(得分:0)
使用exec与此特定正则表达式的解决方案是使用php函数preg_replace()
preg_replace("/\/s/./", "/", $filename);