我想匹配CJK字符。但是下面的正则表达式[[:alpha:]]\+不起作用。有人知道如何匹配CJK字符吗?
$ echo '程 a b' | sed -e 's/\([[:alpha:]]\+\)/x\1/g'
程 xa xb所需的输出为x程 a b。
发布于 2019-06-17 08:11:43
正如@WiktorStribiżew建议的那样,使用perl会更容易。
如果Perl是您的选项,请尝试以下操作:
echo "程 a b" | perl -CIO -pe 's/([\p{Script_Extensions=Han}])/x\1/g'输出:
x程 a b发布于 2019-06-27 04:57:23
使用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' filenameNOTES
\p{Han}匹配单个中文字符,characters$1匹配1个或更多个中文字符的块。value-Mutf8是对用Perl捕获的值的反向引用,$&替换为整个匹配value-Mutf8让Perl识别直接在Perl中使用的UTF8编码字符code-CSD (相当于-CIOED)允许输入解码和输出重新编码(它将适用于UTF8编码)。https://stackoverflow.com/questions/56623265
复制相似问题