【问题标题】:Replace Hexadecimal values with another hexadecimal values in UNIX在 UNIX 中将十六进制值替换为另一个十六进制值
【发布时间】:2018-07-16 19:30:27
【问题描述】:

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

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

文件 example_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  ...............%

【问题讨论】:

  • 试试s/\x25/\x15/g
  • 你什么时候做xxd?所以你实际上是在尝试替换二进制文件中的值,而不是“十六进制字符”,对吗?
  • 是的,我正在尝试替换实际的十六进制值
  • s/\x25/\x15/ 有效。请参阅下面的答案,它表明文件中二进制数据的最小示例可与 s/// 一起使用。其他事情正在发生。您的文件实际上是二进制文件吗?你有一个.txt 分机。
  • 所以你想为NACK 更改一个ascii '%'?它总是文件的最后一个字节吗?

标签: regex unix sed hex


【解决方案1】:

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

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

【讨论】:

  • 我刚刚添加了十六进制打印输出的样本并澄清了问题
【解决方案2】:

这是我最终采用的有效方法。

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

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 2014-02-05
    • 2018-01-22
    • 2016-08-07
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多