Поиск в командной строке Perl и замена на несколько выражений

Я использую Perl для поиска и замены нескольких регулярных выражений. Когда я выполняю следующую команду, я получаю сообщение об ошибке:

prompt> find "*.cpp" | xargs perl -i -pe 's/##(\W)/\1/g' -pe 's/(\W)##/\1/g'
syntax error at -e line 2, near "s/(\W)##/\1/g"
Execution of -e aborted due to compilation errors.
xargs: perl: exited with status 255; aborting

-e в Perl имеется несколько -e, почему это не работает? Есть ли этому решение?

Ответ 1

-e несколько -e.

Вам не хватает ';'

find "*.cpp" | xargs perl -i -pe 's/##(\W)/\1/g;' -pe 's/(\W)##/\1/g;'

Заявления Perl должны заканчиваться ; , Заключительный оператор в блоке не нуждается в конечной точке с запятой. Таким образом, единственный -e без ; будет работать, но вам придется добавить ; когда у вас несколько -e.