sed -n -e 's/^foo=\([^;][^;]*\).*//p' -e 's/.*;foo=\([^;][^;]*\).*//p' yourGBfile
-n opção, não imprima todas as linhas
-e 'script'
O primeiro script ee corresponde se uma linha começa com foo=
e o segundo e-script corresponde a foo=
após um ponto e vírgula.
[^;]
significa que não corresponde a nenhum ponto-e-vírgula e [^;][^;]*
significa pelo menos um ponto-e-vírgula (não encontrará valores vazios!), o que efetivamente extrai seu valor entre o igual e o ponto e vírgula.
Os parênteses incluem uma string posicional que é referenciada com .