我正在尝试从文件(UTF-8)中删除一些字符。我tr
为此目的使用:
tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)
文件包含一些外来字符(如“??????????”或“àé”)。tr
似乎不理解它们:它将它们视为非 alpha 并删除。
我试过更改我的一些语言环境设置:
LC_CTYPE=C LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=ru_RU.UTF-8 tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些都没有奏效。
我怎样才能tr
理解Unicode?
我需要国际化的实用程序,它的作用与tr
:从流中获取字符并将其替换为相应的字符。不是像从低到高这样的特定案例解决方案,而是需要通用案例解决方案。sed
如果可能的话,不要使用 gorillion 管道电话。
请注意,这tr
不适用于 Linux:它转换字节,而不是字符。这对多字节编码失败。
$ tr --version | head -n 1
tr (GNU coreutils) 8.23
$ echo $LC_CTYPE
en_US.UTF-8
$ echo 'Ångstrom' | tr Æ Œ
?ngstrom
Run Code Online (Sandbox Code Playgroud)