在多个文件中查找并替换正则表达式(匹配unicode字符类Devanagari)

假设您有一个名为test.txt的文件,其中包含以下行:

 ಕದಂಬ कदम्ब 

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

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

但事实并非如此。 怎么做到这一点?

根据steeldriver的建议,您可以强制STDIN / STDOUT为UTF-8:

-C本身(没有后跟任何数字或选项列表),或PERL_UNICODE环境变量的空字符串“”与-CSDL具有相同的效果。 换句话说,标准I / O句柄和默认的open()层是UTF-8-fied,但仅限于语言环境变量指示UTF-8语言环境。

 find . -name 'test.*' 2>/dev/null | xargs perl -w -C -i -p -e 's/(\p{Devanagari})/D/g' 

将像这样转换您的示例文件:

 ಕದಂಬ DDDDD 

资料来源: http : //perldoc.perl.org/perlrun.html#Command-Switches