我正在尝试从文件(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?
有什么方法可以检索当前语言环境中给定字符类(如blank
, alpha
, digit
...)中所有字符的列表。
例如,
LC_ALL=en_GB.UTF-8 that-command blank
Run Code Online (Sandbox Code Playgroud)
理想情况下,在我的 Debian 系统上,会显示如下内容:
09 U+0009 HORIZONTAL TAB
20 U+0020 SPACE
e1 9a 80 U+1680 OGHAM SPACE MARK
e1 a0 8e U+180E MONGOLIAN VOWEL SEPARATOR
e2 80 80 U+2000 EN QUAD
e2 80 81 U+2001 EM QUAD
e2 80 82 U+2002 EN SPACE
e2 80 83 U+2003 EM SPACE
e2 80 84 U+2004 THREE-PER-EM SPACE
e2 80 85 U+2005 FOUR-PER-EM SPACE
e2 80 86 U+2006 SIX-PER-EM SPACE
e2 80 88 …
Run Code Online (Sandbox Code Playgroud)