바이너리 파일에서 2바이트 유니코드를 대체하는 쉘 스크립트/유틸리티

바이너리 파일에서 2바이트 유니코드를 대체하는 쉘 스크립트/유틸리티

대용량 유니코드 파일이 많이 있습니다. 각 유니코드 바이트 쌍을 새로운 유니코드 바이트 쌍으로 바꾸고 싶습니다. 예를 들어 원본 파일에 "C3 B9 C3 AB C3 B8 C3 B0"이 포함되어 있는데 이를 "D7 A0 D7 A8 D7 9B D7 A9"로 바꾸고 싶습니다. 전체 파일에서 모든 "C3 B9"를 "D7 A0"으로 바꿔야 합니다. "D7 YY" 값으로 대체된 약 30가지의 "C3 XX" 값이 있을 것입니다. 각 교체를 반복하는 테이블이 필요합니다.

이상적으로는 원본 파일을 대체하지만 새 출력 파일을 생성할 수도 있습니다.

해당 작업을 수행할 수 있는 Ubuntu에서 실행되는 유틸리티가 있습니까?

답변1

Perl을 사용하면 이 작업을 수행할 수 있습니다.

예시 파일:

echo -e "\xe8\x90" > a

이제 이렇게 하면:

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

당신은 얻습니다 0x41 0x42, 즉AB

답변2

Perl 호출의 대안은 sed를 사용하는 것입니다.

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

스트림 편집기(sed)를 사용하여 내부 실행(파일을 직접 수정한다는 의미)을 수행하도록 요청했고, 이전 파일이 백업되도록 -i에 인수로 .bckp를 제공했습니다. 그런 다음 정규식을 사용하여 16진수 바이트를 찾고 이를 사용하려는 바이트로 바꾸는 스왑 표현식을 실행합니다. 파일 호출은 이 작업을 수행하려는 대용량 파일입니다.

백업 없이 전체 교체를 원하는 경우(예: 파일이 저장소에 있음) -i 다음에 .bckp를 제거하면 새 파일이 생성되지 않습니다.

관련 정보