如何使用此 perl one liner 查找 4 位 unicode 字符?

bar*_*lop 2 unicode perl

我有一个带有这个 unicode 字符的文件 ?

在此处输入图片说明

以 UTF-8 格式保存在记事本中的文件

我试过这条线

C:\blah>perl -wln -e "/\x{1ed7}/ and print;" blah.txt

但它没有捡起来。如果文件有一个像“a”(unicode hex 61)这样的字母,那么\x{61}就把它捡起来。但是对于 4 位 unicode 字符,我在提取字符时遇到了问题。

Gra*_*ean 6

您使用/\x{1ed7}/. 问题是你的正则表达式想要匹配字符,但你给了它字节。您需要告诉 Perl 在读取它们时从 UTF-8 解码字节,然后在写入它们时将它们编码为 UTF-8:

perl -CiO -ne "/\x{1ed7}/ and print" blah.txt
Run Code Online (Sandbox Code Playgroud)

-C 选项控制如何将 Unicode 语义应用于输入和输出文件句柄。因此,例如-CO(“输出”的大写“o”)相当于在脚本开始之前添加它:

binmode(STDOUT, ":utf8")
Run Code Online (Sandbox Code Playgroud)

同样,-CI等价于:

binmode(STDIN, ":utf8")
Run Code Online (Sandbox Code Playgroud)

但就您而言,您没有使用 STDIN。相反,它-n会在您的代码周围环绕一个循环,以打开命令行中列出的每个文件。因此,您可以改为使用-Ci':utf8'I/O 层添加到 Perl 打开以供输入的每个文件中。您可以将-Ci和组合-CO为:-CiO