命令行 perl 正则表达式替换:替换字符串包含 utf8

命令行 perl 正则表达式替换:替换字符串包含 utf8

假设您有一个名为test.txt以下行的文件:

ಕದಂ.ಬ
कदम्ब.

然后,假设您想用 । 替换 devanagarI unicode 字符(即 कदम्ब 中的)后面的每个点。那么,您可能会认为以下内容可行:

find . -name 'test.*' | xargs perl -w -i -C -p -e 's/(\p{Devanagari})\./$1।/g'

但事实并非如此(我看到最后的点被।取代了)。

如何解决上述问题?

编辑:下面的作品,但我想要一些更具可读性的东西:

find . -name 'test*'|xargs perl -C -w -i -p -e 's/(\p{Devanagari})\./$1\x{0964}/g'

(这是这个问题

答案1

您必须告诉 perl 脚本主体包含 UTF8 字符:

$ perl -w -C -p -e 's/(\p{Devanagari})\./$1।/g' test.txt
ಕದಂ.ಬ
कदम्ब।

$ perl -Mutf8 -w -C -p -e 's/(\p{Devanagari})\./$1।/g' test.txt
ಕದಂ.ಬ
कदम्ब।

相关内容