Perl с одним строком регулярного выражения bash: синтаксическая ошибка рядом с неожиданным токеном `) ' - PullRequest
1 голос
/ 17 марта 2012

У меня есть PERL one liner, который я пытаюсь использовать для файла конфигурации, который содержит список адресов электронной почты через запятую.

perl -nle 'print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'

возвращает bash:

syntax error near unexpected token `)'

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

Ответы [ 3 ]

8 голосов
/ 17 марта 2012

Это потому, что у вас есть одна цитата, которая, как вы надеялись, была внутри вашего регулярного выражения, но оболочка этого не знает. На этот раз вы можете избежать двойных кавычек вокруг выражения Perl:

perl -nle "print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g"

В общем, вам нужно использовать трюк '\'':

perl -nle 'print for m/\* Members= (\w+([-+.'\'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'

'\'' вставляет одинарную кавычку в одинарную строку в оболочке; первая кавычка закрывает текущую строку в одинарных кавычках; цитата с обратной косой чертой включает одинарную кавычку; и последняя кавычка начинает новую строку в одинарных кавычках.

1 голос
/ 17 марта 2012

Как говорили другие, используйте " вместо '.

И есть еще одна ошибка в конце вашего регулярного выражения:

([,])*)*$/i)/g

должно быть написано:

(,)*$/ig

Я не уверен, что ваше регулярное выражение делает то, что вы хотите, пожалуйста, покажите несколько строк в файле, чтобы дать вам лучший ответ.

1 голос
/ 17 марта 2012

Ваша проблема в вашей первой логической группе;' закрывает вашу строку для оценки, прежде чем вы захотите, чтобы она была.

perl -nle 'print for m/\* Members= (\w+([-+.' <-- that character

попробуйте использовать "

perl -nle "print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...