Você precisa de grep com suporte a PCRE (Perl Compatible Regular Expression). por exemplo. O% GNUgrep tem isso - pode ser aproveitado com a opção -P . Existe também um programa autônomo chamado pcregrep que pode ser instalado em muitos sistemas com empacotamento regular.
Observe que -E ativa o ERE (Expressão regular estendida) que não tem suporte a correspondência não-voraz com o token ? .
Portanto, com o GNU grep , você pode fazer, por exemplo:
grep -Po '^.*?foo' file
para combinar (e extrair) até o primeiro foo do início.