script / utilitário shell substitui 2 byte unicode em arquivo binário

7

Eu tenho muitos arquivos Unicode grandes. Gostaria de substituir cada par de bytes Unicode por um novo par de bytes Unicode. Por exemplo, o arquivo original contém "C3 B9 C3 AB C3 B8 C3 B0" e eu gostaria de substituir isso com "D7 A0 D7 A8 D7 9B D7 A9". Eu precisaria substituir cada "C3 B9" por "D7 A0" em todo o arquivo. Haverá cerca de 30 valores diferentes "C3 XX" a serem substituídos pelos valores "D7 YY". Eu precisaria de uma tabela para percorrer cada substituição.

O ideal seria substituir o arquivo original, mas também criar um novo arquivo de saída.

Existe um utilitário que funciona no Ubuntu que fará esse trabalho?

    
por leonow 23.10.2012 / 14:54

2 respostas

3

Isso é possível com o perl,

Um arquivo de amostra:

echo -e "\xe8\x90" > a

E agora, se você fizer isso:

perl -pne 's/\xe8\x90/\x41\x42/g' < a > output

Você recebe 0x41 0x42 , que é AB

    
por 23.10.2012 / 15:53
2

Uma alternativa para a chamada perl é usar sed

sed -i.bckp -e "s/\xc3\xb9/\xd7\xa0/" file

Usando o editor de fluxo (sed), ele está fazendo a execução no local (o que significa que modificará o arquivo diretamente) e eu forneci .bckp como o argumento para -i, para que o arquivo antigo fosse submetido a backup. Em seguida, executo uma expressão de troca que procura seus bytes hexadecimais com regex e troca-os com os bytes que você deseja usar. E a chamada para o arquivo é o arquivo grande com o qual você deseja fazer isso.

Se você quiser substituir o local sem fazer backup (por exemplo, o arquivo está em um repositório), basta remover o .bckp após o -i e ele não criará novos arquivos.

Espero que isso ajude.

    
por 24.10.2012 / 05:49