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

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

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

ಕದಂಬ
कदम्ब

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

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

但事实并非如此。如何实现这一点?

答案1

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

单独使用 -C(后面不跟任何数字或选项列表)或 PERL_UNICODE 环境变量的空字符串“”,与 -CSDL 具有相同的效果。换句话说,标准 I/O 句柄和默认 open() 层是 UTF-8 化的,但前提是语言环境变量指示 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#命令开关

相关内容