У меня есть команда grep, которая работает на моем Mac с BSD grep 2.5.1-FreeBSD, которую я использую для поиска очень длинной однострочной переменной bash:
echo $MY_VAR | grep -Eo s3.+?model
В Ubuntu с GNU grep 2.25 подстановочный знак ?, похоже, не работает. Это не останавливается на первом появлении «модели».
Кто-нибудь, пожалуйста, покажите мне, как получить такое же совпадение в Ubuntu? Откройте для себя либо изменение шаблона, либо установку другого/обновленного grep.
Не буду перечислять миллион шаблонов, которые я пробовал до сих пор, но какое-то время боролся с этим.
Редактировать: Следующее, кажется, работает, так как есть "," после "модели", но выглядит довольно уродливо:
egrep -o 's3.*model' | grep -o '^[^,]*'
Есть ли способ лучше?
Попробуйте grep -Po s3.+?model
@WiktorStribiżew Сработало, спасибо!!!
@EdMorton понятия не имею .. используя MBP 2017 года с macOS Mojave 10.14.2 (18C54) и grep по умолчанию, с которым он поставляется, по-видимому, BSD grep 2.5.1-FreeBSD.

Вы можете использовать параметр регулярного выражения PCRE P с GNU grep, он также позволяет использовать нежадные квантификаторы:
echo $MY_VAR | grep -Po s3.+?model
^
См. онлайн демо:
MY_VAR = "s3://model/;s3://another/model"
echo $MY_VAR | grep -Po 's3.+?model'
# => s3://model
# s3://another/model
Заимствуя пример Виктора и учитывая ваш комментарий и код, связанный с запятыми, похоже, что это то, что вы хотите с любым grep, у которого есть -E для ERE:
$ MY_VAR='s3://model/,s3://another/model'
$ echo "$MY_VAR" | grep -Eo 's3[^,]+model'
s3://model
s3://another/model
Спасибо, да, у меня нет опыта работы с perl или ruby, в основном я программист на python/C. Возможно ли вообще просто установить BSD grep на Ubuntu?