Соответствие регулярному выражению в сценарии оболочки

465
monster

Вот фрагмент из моего скрипта -

regex="<version>([0-9]*)\.([0-9]*)\.([0-9]*)([^<]*)<\/version>.*"  #some unrelated lines of code  echo $(grep -m 1 "<version>" $1) if [[ $(grep -m 1 "<version>" $1) =~ $regex ]] then main_version = "$" feature_version = "$" patch_version = "$" tag = "$" else echo "$1: Version not Found" >&2 fi 

Но это показывает мне следующий вывод -

<version>1.1.7-release</version> <!-- ABC version --> abc/xyz/pom.xml: Version not Found 

Но, насколько я понимаю, regexдолжен совпадать с выводом grep(я повторил его для терминала для лучшей ясности). Так может кто-нибудь сказать, что я делаю не так?

0
Я пробовал это на файле, содержащем ваши материалы, и он соответствует ... каков ваш выпуск bash? (bash - версия) tonioc 5 лет назад 0
Кроме того, что * точно * является выводом из `grep`? `echo $ (grep ...)` будет манипулировать выводом несколькими способами (на самом деле, `echo $ (somecommand)` почти всегда плохая идея). Попробуйте `grep ... | LC_ALL = C cat -vet` - команда `cat` преобразует различные обычно невидимые символы в видимые формы и добавляет« $ »в конец каждой строки, чтобы вы могли видеть, где они находятся. Gordon Davisson 5 лет назад 0
Я обнаружил ошибку, она была вызвана `export -f custom_function`, чтобы использовать custom_function в` xargs` и, конечно же, фрагмент кода aboce был частью custom_funcion. спасибо, что уделили время monster 5 лет назад 0

0 ответов на вопрос

Похожие вопросы