Для базового вопроса вам нужно всего лишь заменить оператор подстановки на оператор сопоставления и вывести условно в зависимости от того, соответствует он или нет.Это также может быть сделано с подстановкой.
Однако, поскольку это в сценарии bash
, вы также можете exit
из программы perl (однострочная) с кодом, который указывает, было ли совпадение/ замещение;тогда скрипт может проверить $?
.
, чтобы только проверить, находится ли шаблон в файле
perl -0777 -nE'say "yes" if /pattern/' -- "$file"
-0777
, который "глотает" весь файл (в $_
) безопаснее -0
, в котором в качестве разделителя записей используется нулевой байт.Кроме того, здесь вы не хотите -i
(изменить файл вместо ) и хотите -n
(циклическое перезапись записей) вместо -p
(также печатает каждый).Я использую -E
вместо -e
, чтобы включить (все) feature
с, для say
.См. Все это в perlrun .
Внутри сценария оболочки вы можете использовать возвращение истинного / ложного оператора поиска в exit
perl -0777 -nE'exit(/pattern/)' -- "$file"
# now check $? in shell
, где вы можетеТеперь программно проверьте, был ли шаблон найден в файле.
Наконец, чтобы запустить исходную подстановку и , можно проверить, были ли выполнены какие-либо
perl -i -0777 -pe'exit(s/pattern/replacement/)' -- "$file"
# now check $? in shell
, гдетеперь код выхода, то есть $?
в оболочке, это число выполненных замен.
Имейте в виду, что это нарушает основную логику успеха / неудачи кодов возврата.
См. perlretut для учебника регулярных выражений.