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