如何perl
从 shell 中正确替换 UTF-8 字符?
这些示例使用标准输入,但我也需要一些适用的东西perl ... file
。
这是我所期望的:
$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABC[æ][ø][å]DEF
这就是我得到的:
$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABCæøåDEF
用 ASCII 替换 Unicode 字符可以立即生效:
$ echo ABC123DEF | perl -CS -pe "s/([123])/[\\1]/g"
ABC[1][2][3]DEF
我的环境:
perl 5.18.2
Bash 3.2.57
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
用这个 :
也适用于文件
输出 :
笔记 :
\\1
用于awk,\1
用于sed,在perl中我们使用$1
perldoc perlrun
utf8-CSD
技巧您的输入:
IMO 的一种好方法是
-C
选项加utf8
:如果你不想在命令行上使用 UTF-8,你总是可以用纯 ASCII 写你的 Perl 代码,并使用转义符,比如
\xAB
,\x{ABCD}
,或者在更新的 Perls\N{U+ABCD}
或者\N{CHARNAME}
:这个有点创意:
@ARGV
将被解释为 UTF-8,因此您可以将源代码保留为 ASCII 并通过命令行参数传递 UTF-8 字符(不一定是最好的解决方案,只是展示您如何制作使用该-CA
选项):或者,当然,您可以随时将 oneliner 变成实际脚本,您可以在其中
进一步阅读:perlunitut、perlunifaq、perluniintro、perlunicode、perlunicook。
$ echo 'ABCæøåDEF' | perl -CS -Mutf8 -pe 's/([æøå])/[$1]/g'