我正在尝试从文件(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?
这是我的简单问题,如何从命令行将半角转换为全角。我认为这将内置在我的iconv
命令行中,但我在这里没有找到任何内容:
$ iconv -l | grep -i full\n-> nothing\n$ iconv -l | grep -i half\n-> nothing\n
Run Code Online (Sandbox Code Playgroud)\n典型的输入是:
\n$ echo -n "\xef\xbc\xa1b\xef\xbc\x99\xef\xbc\x98\xef\xbc\x97\xef\xbc\x96\xef\xbc\x95\xef\xbc\x94\xef\xbc\x93\xef\xbc\x92\xef\xbc\x91\xef\xbc\x90" | iconv -f utf8 -t utf16be | hexdump -C\n00000000 ff 21 00 62 ff 19 ff 18 ff 17 ff 16 ff 15 ff 14 |.!.b............|\n00000010 ff 13 ff 12 ff 11 ff 10 |........|\n00000018\n
Run Code Online (Sandbox Code Playgroud)\n 我正在尝试将一些字符转换为这样的全角形式
tr 'abcdefghijklmnopqrstuvwxyz' '??????????????????????????'
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用。我进行了搜索,结果发现tr
不支持 UTF-8。所以基于那个问题的答案,我尝试使用 perl
tr 'abcdefghijklmnopqrstuvwxyz' '??????????????????????????'
Run Code Online (Sandbox Code Playgroud)
但仍然没有帮助。我尝试了更简单的版本
perl -C -pe 'tr/abcdefghijklmnopqrstuvwxyz/??????????????????????????/'
Run Code Online (Sandbox Code Playgroud)
似乎 perl 仍然将多字节 UTF-8 字符视为字节
如何正确转换这些字符?