如何使用字符的 unicode 值 grep 字符?

Stu*_*pid 12 grep regular-expression unicode

我有一个 Unicode 字符 ?,由它的 Unicode 代码点 16A0 表示,在一个文本文件中(文本文件被编码(?)为 utf-8)。

当我这样做时,grep '\u16A0' test.txt我没有结果。我如何 grep 那个字符?

pLu*_*umo 10

您可以使用ANSI-C 引用来替换 ANSI C 标准指定的反斜杠转义字符。

grep $'\u16A0'
Run Code Online (Sandbox Code Playgroud)

对于一些更复杂的示例,您可以参考此相关问题及其答案。

  • 请注意,它不是 ANSI C,C 语言标准没有指定 shell 的功能,它是由 David Korn 为 Korn shell 发明的。https://unix.stackexchange.com/a/65819/5132 (2认同)

小智 7

您可以使用ugrep作为 grep 的直接替代品来匹配 Unicode 代码点 U+16A0:

ugrep '\x{16A0}' test.txt
Run Code Online (Sandbox Code Playgroud)

它采用与 grep 相同的选项,但提供更多的功能,例如:

ugrep 搜索 UTF-8/16/32 输入和其他格式。选项 -Q 允许搜索许多其他文件格式,例如 ISO-8859-1 到 16、EBCDIC、代码页 437、850、858、1250 到 1258、MacRoman 和 KIO8。

ugrep默认匹配 Unicode 模式(使用选项 -U 禁用)。正则表达式模式语法符合 POSIX ERE 标准,并使用类似 PCRE 的语法进行了扩展。选项 -P 也可用于 Perl 与 Unicode 模式的匹配。

有关详细信息,请参阅GitHub 上的 ugrep