如何grep在 Linux 中使用 Unicode 字符“零宽度空间”(U+200B)?
$ grep '%U200B' filename?
Run Code Online (Sandbox Code Playgroud)
首先让我们打印一个:
$ 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)
| 归档时间: |
|
| 查看次数: |
8380 次 |
| 最近记录: |