支持utf的coreutils?

Cha*_* Xu 18 coreutils cut unicode

cut今天用的时候发现它不把一个UTF-8字符当作一个字符,而是把3个字符当作一个字符来对待,因为它有3个字节长。

对于许多工具来说,这似乎通常是正确的。

是否有支持coreutilsUTF-8 的版本?

我的locale输出:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

这是cut不起作用的时候

echo ?? | cut -c 2-
???
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是

?
Run Code Online (Sandbox Code Playgroud)

如果cut -c使用多字节字符。

Gil*_*il' 16

GNU coreutils 确实理解 UTF-8。例如echo ?? | wc -m3在 UTF-8 语言环境中正确输出(请注意,该选项是-m,而不是-c由于历史原因,这意味着字节)。

这是cut. 查看, on characters的来源cutcut根本没有实现:该-c选项被视为 的同义词-b

一种解决方法是使用 awk。GNU awk 可以很好地处理 UTF-8。

awk '{print substr($0,2,length)}'
Run Code Online (Sandbox Code Playgroud)

  • 值得提交错误报告(即使它最终是重复的)来惹恼 coreutils 维护者实际修复这样的错误,而不是仅仅添加没人需要的愚蠢的黑客和玩具实用程序...... (9认同)