Primeiro de tudo, o ls | é completamente inútil. Você deseja procurar dentro do arquivo 9707le8.log , não na lista de arquivos e diretórios no seu diretório atual (que é o que ls imprime). Em qualquer caso, grep ignora qualquer entrada canalizada para ele ( | grep ) quando também é fornecido um nome de arquivo para procurar na linha de comando como você tem.
Dito isso, sua expressão regular significa "encontrar a string 9139= , seguida por < = 8 letras minúsculas". No entanto, existem apenas cinco letras após o = ; o sexto caractere é um _ e isso não faz parte do grupo de caracteres [a-z] . Uma solução simples é adicioná-lo à turma:
$ grep -Eo '9139=[a-z_]{0,8}' 9707le8.log
9139=eagle_fi
Agora, como você deseja 9139=eagle_fix11 , é necessário aumentar os caracteres:
$ grep -Eo '9139=[a-z_]{0,18}' 9707le8.log
9139=eagle_fix_trader
Desta vez, o problema é que você não está combinando os números, pois [a-z_] não os inclui. Então, você quer algo assim:
$ grep -Eo '9139=[a-z_0-9]{0,18}' 9707le8.log
9139=eagle_fix_trader11
Ou, para um caso mais geral, em que você deseja 9139= por uma sequência de letras minúsculas ou _ e, em seguida, dois números, é possível usar:
$ grep -Eo '9139=[a-z_]+[0-9]{2}' 9707le8.log
9139=eagle_fix_trader11
Ou, com o GNU grep:
$ grep -Po '9139=[a-z_]+\d{2}' 9707le8.log
9139=eagle_fix_trader11