Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Как узнать была ли замена по шаблону в режиме, когда Perl like sed?

#регулярные_выражения #perl


Есть ли возможность вернуть из Perl exit code отличный от 0, если не произошло замены
текста, когда Perl работает в режиме sed с опциями -pe?

В этом примере хотелось бы вернуть не ноль, для дальнейшего code workflow в SHELL
скрипте:

echo "xxx xxx" | perl -pe 's/yyy/zzz/'

    


Ответы

Ответ 1



Оператор замены возвращает количество произведенных замен, поэтому мы можем посчитать их в переменной. Это происходит в скрытом цикле, который добавляет ключ -p, поэтому сразу вернуть это количество не получится. Мы можем перехватить момент завершения программы создав блок END, в котором можно менять код завершения программы, находящийся в $?. echo "xxx xxx" | perl -pe '$c+=s/yyy/zzz/; END { $?=$c }' && echo "No replacement" Данный пример выведет "No replacement", так как замены не произошли.

Комментариев нет:

Отправить комментарий