grep um determinado formato, isso é possível?

1

Estou tentando encontrar uma certa seqüência desconhecida de 11 caracteres em um enorme arquivo de captura de pacotes. A única coisa que sei é que a string que estou procurando tem o formato x.x-xxxxxxx . Eu tenho procurado por um tempo e não consigo encontrar a declaração grep correta para conseguir isso, alguém pode ajudar?

    
por s.gang 19.12.2016 / 20:41

1 resposta

4

O formato para grep é o que chamamos de "expressão regular POSIX" (procure) e suporta algumas primitivas de correspondência simples. Se você sabe que quer apenas caracteres alfanuméricos, pode usar uma classe de caracteres como esta: [a-zA-Z0-9] . grep tem até um atalho para essa classe específica (porque é tão útil) assim: [[:alnum:]] . man grep tem muito mais informações sobre isso.

Você também pode usar a contagem de repetição para especificar quantos desses caracteres deseja corresponder. No seu caso, você quer corresponder: 1 caractere alfanumérico, depois um ponto, depois mais um caractere e, em seguida, um traço seguido por 7 caracteres. Na expressão regular POSIX isto parece assim:

[[:alnum:]]\.[[:alnum:]]-[[:alnum:]]{7}

Notas:

  1. Eu tive que escapar do período com uma barra invertida, caso contrário, ele será resolvido como a expressão regular "pegar todos os caracteres".
  2. Para que a cláusula de repetição (chaves) funcione, é necessário ativar o "modo de expressão regular estendida" usando -e ou executando egrep em vez do padrão grep .

Assim, o comando completo pode ter esta aparência:

egrep '[[:alnum:]]\.[[:alnum:]]-[[:alnum:]]{7}' /some/file

A saída será as linhas onde a expressão correspondeu, possivelmente destacada em cores (dependendo do seu terminal). Se o seu arquivo de pacote não for delimitado por linha (talvez seja binário), espere muita confusão na tela.

    
por 19.12.2016 / 20:53