(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux/Bash】マルチバイトの文字列を文字数で切り出すスクリプト

スポンサーリンク

やりたいこと

日本語含むマルチバイトな文字列に対して以下のように文字数で抽出を行いたい。

# ./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

数字が減るタイミングの一つ前の文字列を切り出すことでタイトルの挙動を実装しました。

以上、ご参考になれば幸いです。