Это не работает, потому что perl не обрабатывает два флага -e
- без точки с запятой "между" двумя командами. Вы должны написать это, как показано ниже (если вы потеряете d-кавычку сразу после 'perl', то есть.)
perl -p -i.orig -e "s#\\#\\\\#g;" -e "s#/#\\\\#g" %VIDEOLOG_PROPERTIES_FILE%
Я делаю нечто подобное, но поскольку Perl поддерживает '/'
на ПК, я предпочитаю использовать косую черту. Поэтому я использую следующее:
s![\\/]+!/!g;
Таким образом, его можно легко повернуть к
s![\\/]+!\\\\!g;
Теперь несколько слов о том, почему я так поступаю: иногда люди не могут понять, стоит ли им ставить косую черту в начале или конце частей путей, которые будут объединены. Временами вы получаете даже двойные косые черты. (Но не в том случае, если вы используете File :: Spec .), Поэтому хорошо обрабатывать такие коллизии. Тем более, что это будет путь, мы хотим взять как можно больше слешей и превратить их в то, что нам нравится.
Кроме того, я даже делаю это:
s!([\\/]+([.][\\/]+)?)+!/!g
Поскольку он охватывает те случаи, когда это тот же кластер слешей, разделенных точкой, который ничего не делает, потому что по пути /
<=> (/+.)+
для тех программ и сценариев, которые обрабатывают точки в именах путей, в то время другие программы будут выдавать ошибку.