BASH: Como Grep e exibir um conjunto de valores

1

Em uma mensagem de registro de amostra, temos

20161110-15:29:39.707932513|8=FIX.4.29=031735=D34=00000389552=20161110-15:29:39.70749=413050=11156=DDG109=4130115=EAGLE7|EAGLE7116=eagle_fix_trader11|eagle_fix_trader11144=DAU|E7T9139=eagle_fix_trader119195=U439=805440=150854029208=221=1167=FUT55=14198040=259=054=111=41301110400144=0000035.0000000038=00000000760=20161110-15:29:39.70710=092

do exposto acima, como você pode exibir apenas o valor 9139, então parece

9139=eagle_fix_trader11

Eu usei o comando abaixo

ls | grep -Eo '9139=[a-z]{0,8}' 9707le8.log

Mas eu só entendo

9139=eagle

em vez de

9139=eagle_fix_trader11

Alguma idéia?

    
por DjOlu 09.03.2017 / 22:12

1 resposta

1

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
    
por 10.03.2017 / 00:04