“xxd -p” alternativa para HP-UX - como obter os mesmos resultados com “xd”?

2

Eu tenho um comando que é muito útil no trabalho. Ele procura por um determinado STRING dentro de alguns arquivos brutos hexadecimais com FILENAME . O comando que eu sempre usei em sistemas Linux é:

  find . -name '**FILENAME**' | while read filename; do 
    xxd -p $filename | tr -d '\n' | grep -i "**STRING**" > /dev/null
    if [ $? -eq 0 ];then 
        echo "STRING FOUND IN $filename"; 
    fi; 
done

Eu não criei este comando. Nos sistemas HP-UX, como o xxd não está presente, eu precisaria usar o xd. Mas eu não sei como obter os mesmos resultados que com xxd -p.

Como eu poderia adaptar este comando para rodar em sistemas HP-UX?

    
por EXHALEXHALE 25.07.2016 / 20:11

2 respostas

2

Eu não estou no HP-UX, então isso só foi verificado em xd (1) :

xd -b -An -v $filename
  • -An impede que o deslocamento seja mostrado
  • -b é padronizado para bytes únicos, (octal para od , hex para xd )
  • -v impede que linhas idênticas sejam substituídas por *

(Muitos sistemas, inclusive meu, têm od , mas não xd . Então, para portabilidade, eu uso od -tx1 -An -v $filename .)

Isso produzirá bytes hexadecimais individuais, com um espaço entre cada um. Alterar o comando tr para tr -d [:space:] removerá todos os espaços em branco, não apenas as novas linhas.

Juntando tudo isso, você precisa substituir as partes xxd e tr do seu script para que a linha fique assim:

xd -b -An -v $filename | tr -d '[:space:]' | grep -i "**STRING**" > /dev/null
    
por 25.07.2016 / 20:54
1

O comando

xxd -p < file | tr -d '\n'

pode ser substituído por um script em perl simples

perl -ne 'foreach $c (split(//,$_)) { printf "%02x",ord($c)}' < file
    
por 25.07.2016 / 20:26

Tags