Windows cmd.exe
не использует '
в качестве разделителей строк, только "
. То, что вы делаете, эквивалентно:
perl -p -i.bak -e "'s/log/log,XYZ/g'" config.txt
поэтому -w
жалуется "ты дал мне строку, но она ничего не делает".
Решение заключается в использовании двойных кавычек:
perl -p -i.bak -e "s/log/log,XYZ/g" config.txt
или просто опустить их, поскольку в этой команде нет метасимволов, которые были бы интерпретированы как cmd.exe
.
Добавление
cmd.exe
- просто очень неприятное животное, для любого, кто привык к sh
подобным снарядам. Вот несколько других распространенных ошибок и обходных путей, связанных с вызовом perl
.
@REM doesn't work:
perl -e"print"
@REM works:
perl -e "print"
@REM doesn't work:
perl -e "print \"Hello, world!\n\""
@REM works:
perl -e "print qq(Hello, world!\n)"