У меня есть список полных путей к файлам.Все полные пути к файлам выглядят как "/ dir1 / dir2 / dir3 / s ..".Я хочу полностью удалить с.из имени файла.Существует возможность множественного имени файла, например s.asdfs.cpp.Я не хочу удалять второй случай с.так как это часть действительного имени файла, а не повторяющаяся тема в каждом полном пути к файлу в списке.
Запуск следующего в оболочке работает так, как я хочу:
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 запустите
php -q script_name_that_contains_command_above.php > test.html
и обновить мой браузер Firefox, который отображает test.html Я получаю очень странные результаты.Вместо того, где должен быть указан путь к этому отредактированному файлу, я получаю
<strange box>/<strange box>
, где
<strange box>
- это небольшой прямоугольник с 2 строками и 2 столбцами, состоящими из 0, кроме правого нижнегоклетка.Первый случай имеет 1 в нижней правой ячейке, а второй - 2 в нижней правой ячейке.
Команда sed работает, но, как мне кажется, команда php или exec неправильно ее интерпретирует.Есть идеи?