A menos que a string que você queira extrair possa conter ;
, o mais simples é provavelmente substituir .
(que corresponde a qualquer caractere único) por [^;]
(que corresponde a qualquer caractere excluindo ;
)
$ printf '%s\n' "$my_string" | grep -oP '(?<='baz=')[^;]*'
222
Com grep
vinculado à libpcre 7.2 ou mais recente, você também pode simplificar o lookbehind usando o formulário \K
:
$ printf '%s\n' "$my_string" | grep -oP 'baz=\K[^;]*'
222
Eles imprimirão todas as ocorrências na string e presumirão que o texto correspondente não contém caracteres de nova linha (já que grep
processa cada linha de entrada separadamente).