Eu tenho o arquivo ~/dummy_hex.txt
contendo hex e string aleatória:
\x12\xA1\xF1\xE3somegibberigh
Eu quero contar quantos valores hexadecimais (grupos de \x^hex_digit^^hex_digit^) a string acima possui. No exemplo acima, quero que os comandos sejam executados para retornar o número 4
.
Em outras palavras, quero digitar no meu terminal:
command ^file_having hex^
E devolva o valor 4
Até agora eu tentei fazer isso com:
sed 's/[^\x[0-9A-Fa-f][0-9A-Fa-f]]//g' dummy_hex.txt | awk '{ print length }'
Mas, de alguma forma, parece retornar um resultado errado devido ao tipo incorreto de regex. Você pode me dizer como usar regex compartible PCRE completo com sed para fazer isso?
Como alternativa, quero contar quantos valores hexadecimais minha string contém.
Editar 1
Uma outra abordagem é contar as \x
ocorrências de string, mas isso pode contar qualquer desvio \x
que não possa ser seguido por um valor que indique uma string hexadimal.
sed 's/[^\x]//g' dummy_hex.txt | awk '{ print length }'
Além disso, tentei fazer isso com a -r
opção que habilita o PCRE:
sed -r 's/^\\x[0-9A-Fa-f][0-9A-Fa-f]]/g' dummy_hex.txt | awk '{ print length }'
Mas recebo o erro:
sed: -e expressão #1, char 31: comando `s' não finalizado
Com um
grep
que suporta Expressões Regulares Estendidas e a-o
opção:Para atender a exigência de
command filename
:Como:
Se você contar os caracteres sem hex:
E subtraia isso de toda a contagem de arquivos:
Você pode obter a contagem de caracteres hexadecimais (vezes 4). Em um roteiro:
Estampas:
Lembre-se de que wc conta bytes (não caracteres dependentes de localidade).
Basicamente, faça um loop sem imprimir sobre a entrada (
perldoc perlrun
), incremente um contador para cada correspondência e, em seguida, imprima essa contagem.Uma solução alternativa é usar o perl instalado para fazer isso:
Isso oferece um oneliner rápido e fácil caso você não queira escrever um script (por exemplo, em uma folha de instruções que conterá comandos a serem executados).