使用linux“cut”进行字符串修剪,尊重utf8边界

时间:2013-09-09 14:22:06

标签: linux utf-8 cut

我正在进行一些文本处理,我需要将一个字符串剪切成短子串。我使用剪切但似乎它将根据字节切割我的字符串。我的文本是多字节,utf8编码文本的混合,使用剪切通常会导致最后几个字节是无效的utf8字节,这将导致我进一步处理的问题。所以我想知道是否有正确的方法来做到这一点?

P.S。我尝试了-c参数但它仍然削减了字节。

示例,(机器区域设置为en_GB.UTF-8)

echo“是非常的危险”|切-c -6

是非

echo“是非常的危险”|切-c -7

是非

echo“是非常的危险”|切-c -8

是非

echo“是非常的危险”|切-c -9

是非常

1 个答案:

答案 0 :(得分:2)

感谢评论的人,显然这是linux coreutils中的已知错误:

http://lists.gnu.org/archive/html/bug-coreutils/2006-07/msg00044.html

早在2006年!

我在iconv -c的帮助下有一个“解决方法”,它会忽略非法字节。

echo "是非常的危險" | cut -c -7 | iconv -c

将产生有效序列“是非”(最后没有额外的非法字节)