PHP Exec () с использованием Sed дает странные результаты - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть список полных путей к файлам.Все полные пути к файлам выглядят как "/ 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 неправильно ее интерпретирует.Есть идеи?

1 Ответ

0 голосов
/ 16 февраля 2012

Решением для использования exec с этим конкретным регулярным выражением было использование функции php, preg_replace ()

preg_replace("/\/s/./", "/", $filename);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...