Bashシェルスクリプトで文字列変数を部分的に切り出す(substring)
はじめに
Bash シェルスクリプトで 変数 に格納されている文字列を部分的に切り出す方法について。
サンプルコードを掲載しますが、 GNU Bash でのみ動作する機能もありますので、ご注意ください。
検証環境
先頭(左)から数文字切り出す
文字列が格納された変数に対して、 先頭(左)から数文字切り出す には、以下のようなコマンドを利用します。
※先頭から 4 文字を切り出してみます 。
Bash の変数は、 ${STR:offset:length}
の形式で参照すれば文字列の一部を切り出すことができます。
offset
: 切り出し開始位置(先頭から切り取りたい場合は0
を指定)length
: 切り出し文字数
また、 0
は省略可能です。
末尾(右)から数文字切り出す
先程と同じ変数参照の機能を利用します。
※末尾から 4 文字を切り出してみます 。
offset
にはマイナスが指定可能です。 -4
としているので、末尾から 4 文字目の切り取りの開始位置としてします。
注意点は -4
の値の前にはスペースを入れないといけない ということです。
スペースがない場合の挙動を確認してみます。
${STR:-default}
の変数参照構文と同じと解釈されてしまうためです。
length
の値である 4
は省略可能です。
中央から数文字切り出す
今までの例を見れば、すでにやり方は想像できるはずです。
※4 文字目のすぐ後ろから 4 文字切り出してみます 。
中央を切り取る
「先頭からの切り出し」、 「末尾からの切り出し」を組み合わせれば、中央部分の数文字のみ切り捨ててしまうこともできます。
4 文字目のすぐ後ろから 4 文字切り捨てた結果を出力してみます。
おまけ 1 : ${STR:offset:length}
で length よりも文字が短かった場合はどうなるの?
切り取ろうとする文字列変数が短すぎた場合、エラーになったりはしないでしょうか。
エラー無しで正常動作しますね。
おまけ 2 : sed
を使う方法
当ブログで何度も出てきている sed
コマンド。何をするにも sed
を覚えていると応用が効きます。本当に便利。
sed
で先頭(左)から数文字切り出す
※先頭から 4 文字を切り出してみます 。
sed
で末尾(右)から数文字切り出す
※末尾から 4 文字を切り出してみます 。
sed
で中央から数文字切り出す
※4 文字目から 4 文字切り出してみます。 。
ひとこと
ファイルや標準入力を操作する場合には パイプ+sed で操作することがほとんどですので、今回の文字列変数の切り取りは 引数 や 環境変数 を操作する場合に参考ください。
ディスカッション
コメント一覧
右と左、間違ってない?
ありがとうございます。
右と左、逆ですね。