Использование только расширения параметров bash:
$: # don't use caps; see below.
$: declare branch="bugfix/US3280841-something-duh"
$: tmp="${branch##*/}"
$: echo "$tmp"
US3280841-something-duh
$: trimmed="${tmp%%-*}"
$: echo "$trimmed"
US3280841
Что означает:
$: tmp="${branch_name##*/}"
$: trimmed="${tmp%%-*}"
выполняет работу в два этапа без запуска дополнительных процессов.
В sed
,
$: sed -E 's#^.*/([^/-]+)-.*$#\1#' <<< "$branch"
Это говорит: «после любого или без символов, за которыми следует косая черта, запомните один или несколько символов, которые не являются косыми чертами или тире, затем следует незапоминаемая тире, а затем любые или никакие символы, затемзамените весь ввод запомненной частью. "
Ваш исходный шаблон был
's/\(^.*\)\/[a-z0-9]\|[A-Z0-9]\+/\1/g'
Это говорит: «запомните любое число, за которым следует косая черта, затем строчная буква или цифра, затем символ канала (потому что они работают только с-E), затем заглавная буква или цифра, затем буквальный знак плюс, а затем замените все это на то, что вы запомнили. "
Руководство по GNU - ваш друг.Я все время выгляжу, чтобы убедиться, что все делаю правильно.Иногда это все еще занимает у меня несколько попыток, смеется.
В сторону - постарайтесь не использовать имена переменных с прописными буквами.Это соглашение, которое указывает, что оно особенное для ОС, например, RANDOM или IFS.