我想匹配CJK字符。但是以下正则表达式[[:alpha:]]\+
不起作用。有人知道匹配CJK字符吗?
$ echo '程 a b' | sed -e 's/\([[:alpha:]]\+\)/x\1/g'
程 xa xb
所需的输出为x程 a b
。
答案 0 :(得分:2)
正如@WiktorStribiżew所建议的那样,使用perl会更容易。
如果您选择Perl,请尝试以下操作:
echo "程 a b" | perl -CIO -pe 's/([\p{Script_Extensions=Han}])/x\1/g'
输出:
x程 a b
答案 1 :(得分:0)
使用Perl,您的解决方案将像
perl -CSD -Mutf8 -pe 's/\p{Han}+/x$&/g' filename
或者,对于5.20之前的Perl较旧的版本,请使用捕获组:
perl -CSD -Mutf8 -pe 's/(\p{Han}+)/x$1/g' filename
要内联修改文件内容,请添加-i
选项:
perl -i -CSD -Mutf8 -pe 's/(\p{Han}+)/x$1/g' filename
注释
\p{Han}
匹配单个汉字,\{Han}+
匹配1个或多个汉字的大块$1
是对用(\p{Han}+)
捕获的值的反向引用,$&
替换为整个匹配值-Mutf8
使Perl能够识别直接在您的Perl代码中使用的UTF8编码的字符-CSD
(相当于-CIOED
)允许输入解码和输出重新编码(适用于UTF8编码)。