Попробуйте следующее:
echo "XABC-123" | egrep -is "(\bABC-[0-9]+)" && echo "ok"
Есть пара решений, которые предлагают использовать ^ (начинается с ...), однако они потерпят неудачу, если вы посмотрите на «ABC-123», который вы, возможно, захотите поймать. Границы слов, вероятно, то, что вы хотите, если вы ищете, начинается с ...
Вот пример вывода:
tim@Ikura ~
$ echo " ABC-123" | egrep -is "(\bABC-[0-9]+)" && echo "ok"
ABC-123
ok
tim@Ikura ~
$ echo "ABC-123" | egrep -is "(\bABC-[0-9]+)" && echo "ok"
ABC-123
ok
tim@Ikura ~
$ echo "XABC-123" | egrep -is "(\bABC-[0-9]+)" && echo "ok"
tim@Ikura ~
$
Обновление: Проблемы с Solaris ... "Поиск слова не так прост, как кажется на первый взгляд. Строка" the "будет соответствовать слову" other ". Вы можете поставить пробелы до и после букв и используйте это регулярное выражение: «the». Однако это не соответствует словам в начале или конце строки. И это не соответствует случаю, когда после слова стоит знак препинания.
Существует простое решение. Символы "\ <" и ">" аналогичны якорям "^" и "$", так как они не занимают позицию символа. Они делают «привязку» выражения между, чтобы соответствовать, только если оно находится на границе слова. Шаблон для поиска слова "the" будет "\ <[tT] he>". Символ перед «t» должен быть либо символом новой строки, либо чем-либо, кроме буквы, цифры или подчеркивания. Символ после «е» также должен быть символом, отличным от цифры, буквы или подчеркивания, или это может быть символ конца строки. "
tim@Ikura ~
$ echo "XABC-123" | egrep -is "(\<ABC-[0-9]+\>)" && echo "ok"
tim@Ikura ~
$ echo " ABC-123" | egrep -is "(\<ABC-[0-9]+\>)" && echo "ok"
ABC-123
ok