Этот ответ - чистый GNU SED:
export text=" bla bla word word1 = string1 string2 string3 ";
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/';
Я немного изменяю строку, потому что возможно иметь больше слов, правила изменятся, если это слово не последнее.
Давайте объясним это:
.*=
: все символы перед знаком равенства. .*= /?
: это основная часть, после равенства я оставляю пробел ипоставить / ?, это означает один или ноль вхождений, не знаю, оставите ли вы здесь пробел. [a-zA-Z0-9]*
все вхождения az AZ 0-9, слово (string1). \([a-zA-Z0-9]*\)
снова получите все вхождения a-zA-z0-9, второе слово. \).*
все остальные вещи. /\1/
будетвыведите все, что вы между \ (\).
Надеюсь, это кому-нибудь поможет.