今日使用するときは、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)}'