用于 grep Unicode 字符“零宽度空间”(U+200B)的 Linux shell 命令?

Din*_*esh 7 linux shell

如何grep在 Linux 中使用 Unicode 字符“零宽度空间”(U+200B)?

$ grep '%U200B' filename?
Run Code Online (Sandbox Code Playgroud)

l0b*_*0b0 8

首先让我们打印一个:

$ printf %b '\u200b' | uniname
character  byte       UTF-32   encoded as     glyph   name
        0          0  00200B   E2 80 8B               ZERO WIDTH SPACE
Run Code Online (Sandbox Code Playgroud)

现在我们应该能够使用相同的格式来搜索它(使用 Bash):

$ printf %b '\u200b' | grep -q "$(printf %b '\u200b')"
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

这里的技巧是printf %b将参数视为编码字符,因此您可以使用\x打印单字节字符和\u* 打印多字节字符。

要在文件中找到它,只需执行以下操作:

grep "$(printf %b '\u200b')" filename
Run Code Online (Sandbox Code Playgroud)

* POSIX 规范实际上并不清楚如何%b工作。该printf页面说“%b 转换规范 [...] 已在此处添加,作为处理由 echo 实用程序提供的在字符串操作数中扩展的 -escapes 的可移植方式”,并且echo页面显示了一个未记录的使用示例。

测试:

$ printf %b '\u200b' > test.txt
$ grep -q "$(printf %b '\u200b')" test.txt
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)