Как мне избежать левого парена в регулярном выражении Perl? - PullRequest
3 голосов
/ 20 февраля 2009

Если у меня есть файл, содержащий несколько экранированных паренов, как я могу заменить все экземпляры парней без экранирования с помощью Perl?

т.е. включите это:

.... foo\(bar ....

в это

.... foo(bar ....

Я попробовал следующее, но получил это сообщение об ошибке:

perl -pe "s/\\\(/\(/g" ./file
Unmatched ( in regex; marked by <-- HERE in m/\\( <-- HERE / at -e line 1.

Ответы [ 3 ]

11 голосов
/ 20 февраля 2009

Вы забываете, что обратные слеши тоже что-то значат для оболочки. Попробуйте использовать одинарные кавычки вместо двойных. (Или поместите ваш скрипт в файл, где вам не нужно беспокоиться о цитировании оболочки.)

6 голосов
/ 20 февраля 2009

Г. Из командной строки не меньше. Слишком много уровней интерпретации метасимволов.

Попробуйте заменить двойные кавычки одинарными, посмотрите, поможет ли это.

0 голосов
/ 20 февраля 2009

cjm's ответ , вероятно, лучший. Если вы должны сделать это в командной строке, попробуйте использовать quotemeta () или escape-последовательность metaquoting (\ Q ... \ E) . Это сработало для меня в командной строке bash:

perl -pe "s/\Q\(\E/(/g" ./file
...