сценарий оболочки Perl избежал замены шаблона не работает - PullRequest
0 голосов
/ 03 февраля 2019

У меня эта НЕ рабочая проблема.

echo "aabbccdd" | perl -w -pe "s/(?<Naa>aa)/\g{Naa}-$1/;"

она выводит

Нераспознанный escape \ g прошел через строку -e 1.

моя версия perl "subversion 4 (v5.18.4)"

моя версия bash "версия 4.2.53 (1) -релиз (x86_64-redhat-linux-gnu)"

мой дистрибутив ОС - «Fedora, выпуск 20 (Heisenbug)» *

моя локаль - «C»

как решить?

обновление:

как отобразить одну и ту же помеченную группу по номеру 1?

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете использовать \g{name} (или \k<name>) только на соответствующей стороне регулярного выражения.Вы можете использовать $+{name} на стороне замены:

echo "aabbaaccdd" | perl -w -pe "s/(?<Naa>aa)(?=bb\g{Naa}).*/$+{Naa}/;"

распечатывает

aa

Это потому, что именованные захваты помещаются в хеш-таблицу %+.

РЕДАКТИРОВАТЬ: Виктор Stribiżew избил меня, когда я писал это, в комментариях к вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...