在UNIX中将十六进制值替换为另一个十六进制值

时间:2018-02-06 16:50:17

标签: regex unix sed hex

我正在尝试替换其中一个文件中的十六进制值。

但是,我不知道如何以正常形式将其写回来。我不确定以下是否是正确的方法。我正在将十六进制25更改为十六进制15。

文件example_2018-02-02-14-51-47_US.txt是UTF-8。

 dequeue(&someQueue);

以下是我执行xxd时示例文件的结尾。我试图用十六进制15代替十六进制25:

cat example_2018-02-02-14-51-47_US.txt | sed 's/\x25\x15/ /g' | od -x > example_2018-02-02-14-51-47_US_Convert.txt

2 个答案:

答案 0 :(得分:0)

编辑:现在问题反映了更改二进制文件,所以我相应地更改了答案:

我们可以直接使用\ x表示法替换二进制文件中的字节。我做了一个测试文件:

$ echo -ne "\xf0\xf0\xf3\xf5\xf8\x25" > binfile
$ cat binfile | xxd 
00000000: f0f0 0c33 0c35 0c38 0c32 35              ...3.5.8.25

好的,我们只是通过sed来管道它,它可以工作:

$ cat binfile | sed -e 's/\x25/\x15/g' > newbinfile
$ cat newbinfile | xxd
00000000: f0f0 f3f5 f815                           ......

答案 1 :(得分:0)

这是我最终采用的方法。

tr '\045' '\025' < example_2018-02-02-14-51-47_US.txt > example_2018-02-02-14-51-47_US_replaced.txt