coreutils는 utf를 지원합니까?

coreutils는 utf를 지원합니까?

오늘 사용할 때 cutUTF-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=

cut이때는 안되는 경우가 있어요

echo 哈哈 | cut -c 2-
��哈

올바른 출력은 다음과 같아야합니다

cut -c멀티바이트 문자를 사용하는 경우 .

답변1

GNU coreutils는 일반적으로 UTF-8을 이해합니다. 예를 들어 UTF-8 로케일의 올바른 출력입니다 echo 哈哈 | wc -m(이 옵션은 기록상의 이유로 바이트가 아니라 바이트를 의미함).3-m-c

이것은 의 버그입니다 cut. 보고 있다원천cut, cuton 문자는 전혀 구현되지 않습니다. -c옵션은 의 동의어로 처리됩니다 -b.

해결책은 awk를 사용하는 것입니다. GNU awk는 UTF-8을 매우 잘 처리합니다.

awk '{print substr($0,2,length)}'

답변2

이것은 귀하의 빌드/버전에 버그가 있는 것 같습니다 coreutils. Ubuntu 10.10 Maverick Meerkat에서는 이것을 재현할 수 있지만 Fedora 15에서는 재현할 수 없습니다.

[patches@holocene ~]$ cat /etc/fedora-release
Fedora 버전 15(Lovelock)
[patches@holocene ~]$ rpm -q coreutils
coreutils-8.10-2.fc15.x86_64
[patches@holocene ~]$ echo 하하|cut -c 2-
하아
[patches@holocene ~]$ sudo chroot /mnt/maverick
root@holocene:/# grep DISTRIB_DESC /etc/lsb-release
DISTRIB_DESCRIPTION="우분투 10.10"
root@holocene:/# dpkg-query -s coreutils |버전 번호
버전: 8.5-1ubuntu3
root@holocene:/# echo haha|cut -c 2-
��하

coreutilsUbuntu도 사용하는 경우 다음 명령을 실행하여 Ubuntu 패키저에 오류를 보고할 수 있습니다.

apport-bug coreutils

고쳐 쓰다: Gilles는 댓글에서 이것이 coreutils패치된 Fedora 업스트림 버전의 버그라고 지적했습니다. 여기서 패치를 찾을 수 있습니다.직접 패치하여 작동시키려는 경우.

관련 정보