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).