Ваше perl
выражение нарушено.Наблюдайте:
$ echo "Mute: no" | perl -p -i -e 's/.+\\s(yes|no)$//'
Mute: no
Это ничего не делает!Причина, по которой он ничего не делает, состоит в том, что ничто не соответствует.Почему бы и нет?Потому что вы излишне сбежали \s
.Правильное выражение должно быть s/.+\s(yes|no)$/$1/
.Обратите внимание на единственный \
, предшествующий s
.
. С этим новым выражением мы получим:
$ echo "Mute: no" | perl -p -i -e 's/.+\s(yes|no)$/$1/'
no
$ echo "Mute: yes" | perl -p -i -e 's/.+\s(yes|no)$/$1/'
yes
Обратите внимание, что это по-прежнему не делает то, что вы хотите, потому что если ничего не соответствует,вся линия излучается как есть.Например:
$ echo "Mute: monkies" | perl -p -e 's/.+\s(yes|no)$/$1/'
Mute: monkies
Хотя это возможно решить с помощью более сложного регулярного выражения, я не буду этого делать.Вместо этого я процитирую следующее:
Иногда, когда люди видят проблему, они думают про себя: «Я знаю, я буду использовать регулярное выражение».Теперь у них две проблемы.