【问题标题】:Bytewise grep fails for some byte values对于某些字节值,按字节 grep 失败
【发布时间】:2018-07-31 22:13:03
【问题描述】:

研究 gzip 格式时,我尝试在示例存档中 grep 其神奇字节 1f 8b。我使用了来自this答案的手册。

$ xxd a.gz
00000000: 1f8b 0800 43dc 605b 0003 4bcb cf4f 4a2c  ....C.`[..K..OJ,
00000010: e202 0047 972c b207 0000 00              ...G.,.....
$ grep -obUaP "\x1f" a.gz
0:
$ grep -obUaP "\x8b" a.gz
# nothing is printed

由于某种原因,grep 找到一个字节而没有找到另一个。经过一番调查,我们盲目猜测它在设置了最高有效位的字节上失败了,但是我们找不到任何合理的解释。

为什么会这样?有解决方法吗?

【问题讨论】:

  • 可能是因为您的 grep 使用 UTF-8。
  • @IgnacioVazquez-Abrams 辉煌。添加 LC_ALL=C 有帮助。请给出答案,以便我接受。

标签: bash grep hex


【解决方案1】:

可能是因为grep 使用的是UTF-8;当您搜索“\x8b”时,它正在寻找 0xc2 0x8b。您需要找到某种方法来禁用 grep 的 UTF-8 支持,或者切换到将搜索条件严格解释为二进制值的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多