相关疑难解决方法(0)

如何让 tr 了解非 ascii(unicode)字符?

我正在尝试从文件(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?

linux text-processing unicode tr

38
推荐指数
2
解决办法
1万
查看次数

unicode 字符的 tr 模拟?

我需要国际化的实用程序,它的作用与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)

utilities unicode tr

9
推荐指数
1
解决办法
3090
查看次数

标签 统计

tr ×2

unicode ×2

linux ×1

text-processing ×1

utilities ×1