今日使用するときは、cut
UTF-8文字を1文字として扱うのではなく3バイト長なので、3文字を1文字として扱うことがわかりました。
これは通常多くのツールに当てはまります。
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
マルチバイト文字を使用する場合。
答え1
GNU coreutilsは通常UTF-8を理解しています。たとえば、UTF-8ロケールの正しい出力ですecho 哈哈 | wc -m
(このオプションは、記録上の理由でバイトではなくバイトを意味します)。3
-m
-c
これはのバグですcut
。見ている源泉cut
, cut
on 文字はまったく実装されていません。-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="Ubuntu 10.10" root@holocene:/# dpkg-query -s coreutils |バージョン番号 バージョン: 8.5-1ubuntu3 root@holocene:/# echo haha|cut -c 2- ��
coreutils
Ubuntuも使用している場合は、次のコマンドを実行してUbuntuパッケージャにエラーを報告できます。
apport-bug coreutils
修正する: Gillesはコメントでこれがcoreutils
パッチされたFedoraのアップストリームバージョンのバグであると指摘しました。 ここでパッチを見つけることができます。直接パッチして動作させたい場合。