Мне нужно в конечном итоге соответствовать любому из следующего:
AD-123, ad-123, AD123, and ad123
Пока что у меня есть
| grep -oP 'AD-|ad-|AD|ad'[0-9]\+)
но это соответствует только буквам и полностью игнорирует числа, и я не могу найти удобный для bash способ сделать это.
Контекст/вариант использования: gitook prepare-commit-msg, я хочу взять билет Jira из имени ветки и добавить его в любое сообщение фиксации. Билет Jira будет написан одним из способов, описанных выше, в соответствии с соглашением об именах веток: функция/версия/тикер-ключевые слова (пример: функция/1.1.3/ad-123-some-branch).
Попробуйте (?:AD|ad)-?\d+
| grep -oE "(AD|ad)[-']?[0-9]+" работает, спасибо @WiktorStribiżew
Добавлен отвечать.
Помните, что grep не является частью стандартной оболочки bash. Это внешние двоичные файлы, упакованные вместе с ОС. Если вы не ищете для этого встроенные bash утилиты, удалите строку из заголовка и тегов





Вы можете использовать
| grep -oE "(AD|ad)[-']?[0-9]+"
Это регулярное выражение POSIX ERE (из-за опции -E), которое соответствует
(AD|ad) - либо AD, либо ad (не aD или Ad, поскольку это не разрешено в соответствии с вашими требованиями)[-']? - необязательный - или '[0-9]+ - 1 или более цифрВизуализация:
grep -oE '(AD|ad)-?[0-9]+'? Илиgrep -oE "(AD|ad)[-']?[0-9]+"?