Teste com este arquivo:
$ echo hello world > test.txt
$ echo -n $'\x1b\x1f' >> test.txt
$ echo whatever >> test.txt
$ hexdump -C test.txt
00000000 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 1b 1f 77 68 |hello world...wh|
00000010 61 74 65 76 65 72 0a |atever.|
$ grep -a -b --only-matching $'\x1b\x1f' test.txt
12:
Portanto, neste caso, o 1B 1F
está na posição 12
.
-
Converter em inteiro (provavelmente há uma maneira mais fácil)
$ echo 'ibase=16; ''xxd -u -ps -l 2 -s 12 test.txt' | bc 6943
-
E o contrário:
$ printf '%04X' 6943 | xxd -r -ps | hexdump -C 00000000 1b 1f |..| $ printf '%04X' 4242 | xxd -r -ps | hexdump -C 00000000 10 92 |..|
-
E colocando de volta no arquivo:
$ printf '%04X' 4242 | xxd -r -ps | dd of=test.txt bs=1 count=2 seek=12 conv=notrunc 2+0 records in 2+0 records out 2 bytes (2 B) copied, 5.0241e-05 s, 39.8 kB/s
-
Resultado:
$ hexdump -C test.txt 00000000 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 10 92 77 68 |hello world...wh| 00000010 61 74 65 76 65 72 0a |atever.|