如何用sed匹配cjk字符?

时间:2019-06-16 23:14:36

标签: regex sed unicode utf-8 cjk

我想匹配CJK字符。但是以下正则表达式[[:alpha:]]\+不起作用。有人知道匹配CJK字符吗?

$ echo '程 a b' | sed -e 's/\([[:alpha:]]\+\)/x\1/g'
程 xa xb

所需的输出为x程 a b

2 个答案:

答案 0 :(得分:2)

正如@WiktorStribiżew所建议的那样,使用会更容易。
如果您选择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编码)。