Regex 在UNIX中用另一个十六进制值替换十六进制值

Regex 在UNIX中用另一个十六进制值替换十六进制值,regex,unix,sed,hex,Regex,Unix,Sed,Hex,我正在尝试替换我的一个文件中的十六进制值 然而,我不知道如何以正常的形式写出来。我不确定下面的方法是否正确。我正在将十六进制25改为十六进制15 文件示例_2018-02-02-14-51-47_US.txt的格式为UTF-8 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 下面是我执行xxd时示例文件结尾的

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

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

文件示例_2018-02-02-14-51-47_US.txt的格式为UTF-8

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
下面是我执行xxd时示例文件结尾的样子。我试图用十六进制15替换结尾处的十六进制25:

05ff020: a289 9585 a2a2 1ed3 f4c2 d7f5 f8d3 f1f3  ................
05ff030: e7c4 1e95 a493 931e d985 98a4 85a2 a396  ................
05ff040: 991e 95a4 9393 1e95 a493 931e 95a4 9393  ................
05ff050: 1ef2 f0f2 f2f2 f2f4 f0f4 f3f1 1ed2 d3e8  ................
05ff060: e6f8 f7f8 c2e6 c1d2 1ee2 8599 a589 8389  ................
05ff070: 9587 1ec2 9696 9240 9686 40c2 a4a2 8995  .......@..@.....
05ff080: 85a2 a21e c689 9985 1ec2 a4a2 8995 85a2  ................
05ff090: a240 d6a6 9585 99a2 1e95 a493 931e 95a4  .@..............
05ff0a0: 9393 1e95 a493 931e f0f0 f0f5 1ec9 d31e  ................
05ff0b0: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f3f5 f825  ...............%

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

我们可以直接使用\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                           ......

这就是我最终采取的行之有效的方法

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

执行xxd时,请尝试
s/\x25/\x15/g
?因此,您实际上是在尝试替换二进制文件中的值,而不是“十六进制字符”,对吗?是的,我正在尝试替换实际的十六进制值
s/\x25/\x15/
works。请看下面我的答案,它显示了一个文件中二进制数据的最小示例,它可以与
s//
一起使用。还有别的事情。你的文件实际上是二进制的吗?您有一个
.txt
扩展名。那么您想为
NACK
更改ascii“%”吗?它总是文件的最后一个字节吗?我刚刚添加了一个十六进制打印输出的示例,并对问题进行了澄清