やりたいこと
日本語含むマルチバイトな文字列に対して以下のように文字数で抽出を行いたい。
# ./wcut.sh あいうえお 3 あいう # ./wcut.sh あIうえお 3 あIう
環境情報
# cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" ...
やり方
以下のスクリプトを「wcut.sh」として保存すると
#!/bin/bash bn=`echo -n $1 | wc -c` mn=`echo -n $1 | wc -m` out=`echo $1` if [ $2 -lt $mn ]; then for i in `seq $bn -1 1`;do mn=`echo $1 | cut -c 1-$i | wc -m` if [ $mn -eq $2 ]; then break fi out=`echo $1 | cut -c 1-$i` done else out=`echo $1` fi echo $out
第一引数に元の文字列、第二引数に文字列の長さと指定することで実現可能。
以下、補足です。
補足
文字列から1バイトずつ減らしていった際の改行込みの文字数(wc -m
)は以下のようになっていたので
{あいうえお|6|
あいうえ▒ | 5 |
あいうえ▒ | 5 |
あいうえ | 5 |
あいう▒ | 4 |
あいう▒ | 4 |
あいう | 4 |
数字が減るタイミングの一つ前の文字列を切り出すことでタイトルの挙動を実装しました。
以上、ご参考になれば幸いです。