用 shell perl 替换 UTF-8 字符

for*_*rin 6 perl unicode

如何perl从 shell 正确替换 UTF-8 字符?

这些示例使用标准输入,但我也需要一些适用的东西perl ... file

这是我的期望:

$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABC[æ][ø][å]DEF
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABCæøåDEF
Run Code Online (Sandbox Code Playgroud)

用 ASCII 替换 Unicode 字符可以立即生效:

$ echo ABC123DEF | perl -CS -pe "s/([123])/[\\1]/g"
ABC[1][2][3]DEF
Run Code Online (Sandbox Code Playgroud)

我的环境:

perl 5.18.2
Bash 3.2.57
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

Gil*_*not 8

用这个 :

 $ echo 'ABCæøåDEF' |
    perl -CSD -Mutf8 -pe 's/([æøå])/[$1]/g'
Run Code Online (Sandbox Code Playgroud)

也适用于文件

输出 :

ABC[æ][ø][å]DEF
Run Code Online (Sandbox Code Playgroud)

笔记 :

  • 替换:\\1用于\1用于和在我们使用$1
  • 检查perldoc perlrun-CSDUTF8技巧

  • @forthrin Re *"`perl` 不适用于 Unicode。"* Perl 具有出色的 Unicode 支持,但为了向后兼容,默认情况下不启用它,包括单行。如果您使用 Perl 的目的只是单行,那么是的,您可能需要跳过一些障碍,但是如果您编写脚本,那么您将有更轻松的时间。 (2认同)