У меня есть файл данных из игры с переводами.Разные строки разделены 2 байтами HEX.Один из них кажется случайным, а другой всегда 00
. Примеры для этих "разделителей" были бы 1F 00
44 00
15 00
- как вы можете видеть, некоторые из этих символов могут быть напечатаны.
Я пытался заменить символы в sed sed -i 's/\x..\x00/\x0D\x0A/g' file.data
, но, похоже, sed с HEX не любит подстановочные знаки.
Я также подумал, что могу просто заменить 00
на 0D
и затем удалите последний символ каждой строки, но это не сработало для нескольких печатных символов.
Вот пример части, взятой из файла данных:
s�Block#�%s has been added to your Blacklist�XP�Get Reputation Points�Add to Friends�%s is already your FriendD�Use Magazines to increase Commander's Leadership.
(Success Rate: %s)�Increase Failed'�Leadership successfully upgraded by %d!�Upgrade Leadership
HEX:
73 05 00 42 6C 6F 63 6B 23 00 25 73 20 68 61 73 20 62 65 65 6E 20 61 64 64 65 64 20 74 6F 20 79 6F 75 72 20 42 6C 61 63 6B 6C 69 73 74 02 00 58 50 15 00 47 65 74 20 52 65 70 75 74 61 74 69 6F 6E 20 50 6F 69 6E 74 73 0E 00 41 64 64 20 74 6F 20 46 72 69 65 6E 64 73 19 00 25 73 20 69 73 20 61 6C 72 65 61 64 79 20 79 6F 75 72 20 46 72 69 65 6E 64 44 00 55 73 65 20 4D 61 67 61 7A 69 6E 65 73 20 74 6F 20 69 6E 63 72 65 61 73 65 20 43 6F 6D 6D 61 6E 64 65 72 27 73 20 4C 65 61 64 65 72 73 68 69 70 2E 0A 28 53 75 63 63 65 73 73 20 52 61 74 65 3A 20 25 73 29 0F 00 49 6E 63 72 65 61 73 65 20 46 61 69 6C 65 64 27 00 4C 65 61 64 65 72 73 68 69 70 20 73 75 63 63 65 73 73 66 75 6C 6C 79 20 75 70 67 72 61 64 65 64 20 62 79 20 25 64 21 12 00 55 70 67 72 61 64 65 20 4C 65 61 64 65 72 73 68 69 70
Возможно, я слишком устал, чтобы найти решение, или я упускаю что-то очевидное.Было бы здорово, если бы кто-нибудь мог дать мне подсказку.
Спасибо.
РЕДАКТИРОВАТЬ: понял это.Может быть немного сложнее, но работает в моем случае:
xxd -p file.data | tr -d '\n' > file.hex ---> Convert binary to hex, strip new lines
sed -i 's/.\{2\}/& /g' file.hex ---> add spaces every 2 bits so we don't compare the second half of bit 1 with the first half of bit 2
sed -i 's/.. 0a/0d 0a/g' file.hex ---> replace .. 0a with CR/LF
sed -i 's/.. 00/0d 0a/g' file.hex ---> replace .. 00 with CR/LF
xxd -p -r file.hex file2.data ---> convert the hex back to binary. luckily xxd doesn't care about the missing new lines or added spaces.