5

我的网络应用程序正在显示一些奇怪的输出(不应该存在的 unicode 字符等)。我能想到的最好的办法是,不知何故我在源代码的某个地方引入了一个坏字符,但我不知道在哪里。

我发现这个答案表明我可以做类似的事情:

grep -obUaP "<\x-hex pattern>" .

当我将 unicode char 从浏览器复制到我的Bless十六进制编辑器中时,它告诉我 char 的确切字节是:

15 03 01 EF BF BD 02 02

如何格式化<\xhex pattern>以匹配我需要的确切字节。我试过:

grep -obUaP "<\x-15 03 01 EF BF BD 02 02>" .

但这不起作用。想法?

4

2 回答 2

5

再次检查帖子。FrOsT 在他的实际 grep 命令中不包括“<”和“>”。他只用克拉来附上一个示例语句。他的实际陈述是这样的:

"\x01\x02"

不是:

"<\x01\x02>"

我的计算机上有一个以以下行开头的 C 源文件:

#include <stdio.h>

当我跑

grep -obUaP '\x69\x6E\x63\x6C\x75\x64\x65' io.c

我明白了

1:include

也就是说,行号后跟与模式匹配的字符串。

你可能想跑

man grep

并找出所有这些选项的含义。

于 2014-05-16T13:19:56.010 回答
0

将十六进制字节的模式写入单独的文件并将其加载到stdin搜索中可能是最简单的。

在此示例中,有一个文件sampletext,由 256 个连续字节和偶尔的换行符和searchstringgrep 字符序列组成。

$ xxd sampletext 
00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f  ................
00000010: 0a10 1112 1314 1516 1718 191a 1b1c 1d1e  ................
00000020: 1f0a 2021 2223 2425 2627 2829 2a2b 2c2d  .. !"#$%&'()*+,-
00000030: 2e2f 0a30 3132 3334 3536 3738 393a 3b3c  ./.0123456789:;<
00000040: 3d3e 3f0a 4041 4243 4445 4647 4849 4a4b  =>?.@ABCDEFGHIJK
00000050: 4c4d 4e4f 0a50 5152 5354 5556 5758 595a  LMNO.PQRSTUVWXYZ
00000060: 5b5c 5d5e 5f0a 6061 6263 6465 6667 6869  [\]^_.`abcdefghi
00000070: 6a6b 6c6d 6e6f 0a70 7172 7374 7576 7778  jklmno.pqrstuvwx
00000080: 797a 7b7c 7d7e 7f0a 8081 8283 8485 8687  yz{|}~..........
00000090: 8889 8a8b 8c8d 8e8f 0a90 9192 9394 9596  ................
000000a0: 9798 999a 9b9c 9d9e 9f0a a0a1 a2a3 a4a5  ................
000000b0: a6a7 a8a9 aaab acad aeaf 0ab0 b1b2 b3b4  ................
000000c0: b5b6 b7b8 b9ba bbbc bdbe bf0a c0c1 c2c3  ................
000000d0: c4c5 c6c7 c8c9 cacb cccd cecf 0ad0 d1d2  ................
000000e0: d3d4 d5d6 d7d8 d9da dbdc ddde df0a e0e1  ................
000000f0: e2e3 e4e5 e6e7 e8e9 eaeb eced eeef 0af0  ................
00000100: f1f2 f3f4 f5f6 f7f8 f9fa fbfc fdfe ff0a  ................

$ xxd searchstring 
00000000: 8081 8283                                ....

通过重定向searchstringstdin, grep 可以直接查找字节

$ grep -a "$(<searchstring)" sampletext | xxd
00000000: 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f  ................
00000010: 0a                                       .

$ grep -ao "$(<searchstring)" sampletext | xxd
00000000: 8081 8283 0a                             .....
于 2022-03-02T17:45:23.547 回答