![命令行 perl 正则表达式替换:替换字符串包含 utf8](https://linux22.com/image/1049635/%E5%91%BD%E4%BB%A4%E8%A1%8C%20perl%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9B%BF%E6%8D%A2%EF%BC%9A%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%85%E5%90%AB%20utf8.png)
假设您有一个名为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
ಕದಂ.ಬ
कदम्ब।