Quando cat
produz o arquivo, ele gera byte-by-by-como-é sem substituir espaços ou pontos ou algum outro tipo de caracteres de substituição. Portanto, quando os dados de amostra de áudio binários são exibidos anteriormente no arquivo .WAV, alguns desses bytes correspondem aos códigos de controle do terminal da velha escola e "seqüências de escape" (sequências de bytes começando com o caractere "ESC", que podem ser usado para fazer coisas como alterar o texto ou cor de fundo, limpar a tela do terminal e reposicionar o cursor dentro da tela do terminal). Seu emulador de terminal (Terminal.app ou iTerm2 ou qualquer outro) tenta honrar esses códigos de controle e seqüências de escape, o que gera a forma como normalmente exibe texto, e faz isso de maneiras imprevisíveis.
Várias ferramentas baseadas em terminal têm opções para permitir que você lide com arquivos que possuem alguns dados binários misturados com texto ASCII imprimível puro. Por exemplo, cat
tem uma opção -v
para fazer com que substitua sequências imprimíveis no lugar de caracteres de controle ASCII. Há também vis(1)
, od(1)
, hexdump(1)
, strings(1)
e outros. Você também pode usar ferramentas como sed(1)
, grep(1)
e awk(1)
para tentar extrair os dados XML ASCII do meio dos dados binários no arquivo.
Destas opções, acho que strings(1)
pode ser o mais promissor para você. Ele varre o arquivo procurando por execuções ininterruptas de média a longa duração (strings) de caracteres ASCII imprimíveis e gera automaticamente as cadeias de caracteres que encontrar. Portanto, como o XML é puramente imprimível em ASCII, strings(1)
deve imprimir tudo ao mesmo tempo em que ignora todos os dados de áudio binários.