cut
오늘 사용했을 때 UTF-8 문자를 문자로 취급하지 않고 3 바이트 길이이므로 3 문자로 취급한다는 것을 알았습니다.
이것은 많은 도구에서 일반적으로 적용되는 것 같습니다.
coreutils
UTF-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
멀티 바이트 문자로 작업 한 경우
답변
GNU coreutils는 일반적으로 UTF-8을 이해합니다. 예를 들어 UTF-8 로케일로 echo 哈哈 | wc -m
올바르게 출력 3
합니다 (이력 상 이유로 바이트를 의미하는 옵션은 -m
아닙니다 -c
).
의 버그입니다 cut
. 상기 찾고 소스cut
, cut
문자는 간단하게 구현되지 않습니다 다음 -c
옵션의 동의어로 취급된다 -b
.
해결 방법은 awk를 사용하는 것입니다. GNU awk는 UTF-8에 잘 대처합니다.
awk '{print substr($0,2,length)}'
답변
의 빌드 / 버전에 버그가있는 것 같습니다 coreutils
. Ubuntu 10.10 Maverick Meerkat에서는 이것을 재현 할 수 있지만 Fedora 15에서는 재현 할 수 없습니다.
[patches @ holocene ~] $ 고양이 / etc / fedora-release 페도라 릴리스 15 (Lovelock) [patches @ holocene ~] $ rpm -q coreutils coreutils-8.10-2.fc15.x86_64 [patches @ holocene ~] $ echo 哈哈 | 컷 -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 | grep 버전 버전 : 8.5-1 우분투 3 root @ holocene : / # echo 哈哈 | 컷 -c 2- 哈
Ubuntu를 사용 coreutils
하는 경우 다음 명령을 실행하여 Ubuntu 패키지 관리자 에게 버그를보고 할 수 있습니다 .
apport-bug coreutils
업데이트 : Gilles coreutils
는 Fedora가 패치 한 업스트림 버전의 버그라고 의견을 지적합니다 . 패치 를 적용하기 위해 직접 패치를하려는 경우 여기에서 패치를 찾을 수 있습니다 .