文字列の抽出 ― 2017年05月06日 07:28
文字列の抽出
一応、cutコマンドを使って、dialogからゲットした日付を加工する。
#!/bin/bash
HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]
then
echo "get " $HIDUKE
else
echo "no get"
fi
echo -n date: ; echo $HIDUKE | cut -c 1-2
echo -n month: ; echo $HIDUKE | cut -c 4-5
echo -n year: ; echo $HIDUKE | cut -c 7-10
キタネエなあ・・・。
まあいい。
せっかく変数に入れたんだから、パラメータ展開というのをやってみようと思った。
(パラメータ展開を利用して部分文字列を取得する。)
http://qiita.com/koara-local/items/04d3efd1031ea62d8db5
「オフセットと長さを指定して文字列を取得する
指定方法
${パラメータ:オフセット:長さ}
部分文字列抽出
#!/bin/bash
HOGE="abcdef"
# オフセット位置から長さ分を取得
echo ${HOGE:0:2}
# -> ab
echo ${HOGE:2:2}
# -> cd
echo ${HOGE:4:2}
# -> ef
# 長さを省略した場合はオフセットから最後まで出力
echo ${HOGE:2}
# -> cdef
# 長さにマイナスを指定した場合は最後からマイナス分引いた位置までの長さになる
echo ${HOGE:0:-2}
# -> abcd
# オフセットの位置にマイナスを指定した場合は文法として別のパラメータ展開になる(デフォルト値の指定)
# 指定した変数が空文字列の場合は右に指定した文字が入る
echo ${HOGE:-2}
# -> abcdef
HOGE=
echo ${HOGE:-2}
# -> 2 」
というわけで、若干加工する。
#!/bin/bash
HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]
then
echo "get " $HIDUKE
else
echo "no get"
fi
echo date:${HIDUKE:0:2}
echo month:${HIDUKE:3:2}
echo year:${HIDUKE:6:4}
まあ、こんなもんか。
シェルスクリプトは、長大な処理を長々と書くのには向かない。
コマンドを繋げて、取り込んだファイルやデータを分岐させたり繰り返したりして加工しながら、何らかの成果物を得て、終了すべきツールだ。
基本的に、外部からの入力を受け付けて何かするという処理じゃあない。
それは、シェルスクリプトを使う側が、スクリプトの中にカキコすればいいわけだ。
バッチファイルだからな。
それでも、人様に使っていただくテキストベースの仕掛けを書かなければならないとしたら、なかなか便利な仕組みには違いない。
カレンダー表示とかが出ると、ちょっとなごみ系になる(そうかあ?)。
なんか、少し、やる気が出てきたような気がするな・・・。
一応、cutコマンドを使って、dialogからゲットした日付を加工する。
#!/bin/bash
HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]
then
echo "get " $HIDUKE
else
echo "no get"
fi
echo -n date: ; echo $HIDUKE | cut -c 1-2
echo -n month: ; echo $HIDUKE | cut -c 4-5
echo -n year: ; echo $HIDUKE | cut -c 7-10
キタネエなあ・・・。
まあいい。
せっかく変数に入れたんだから、パラメータ展開というのをやってみようと思った。
(パラメータ展開を利用して部分文字列を取得する。)
http://qiita.com/koara-local/items/04d3efd1031ea62d8db5
「オフセットと長さを指定して文字列を取得する
指定方法
${パラメータ:オフセット:長さ}
部分文字列抽出
#!/bin/bash
HOGE="abcdef"
# オフセット位置から長さ分を取得
echo ${HOGE:0:2}
# -> ab
echo ${HOGE:2:2}
# -> cd
echo ${HOGE:4:2}
# -> ef
# 長さを省略した場合はオフセットから最後まで出力
echo ${HOGE:2}
# -> cdef
# 長さにマイナスを指定した場合は最後からマイナス分引いた位置までの長さになる
echo ${HOGE:0:-2}
# -> abcd
# オフセットの位置にマイナスを指定した場合は文法として別のパラメータ展開になる(デフォルト値の指定)
# 指定した変数が空文字列の場合は右に指定した文字が入る
echo ${HOGE:-2}
# -> abcdef
HOGE=
echo ${HOGE:-2}
# -> 2 」
というわけで、若干加工する。
#!/bin/bash
HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]
then
echo "get " $HIDUKE
else
echo "no get"
fi
echo date:${HIDUKE:0:2}
echo month:${HIDUKE:3:2}
echo year:${HIDUKE:6:4}
まあ、こんなもんか。
シェルスクリプトは、長大な処理を長々と書くのには向かない。
コマンドを繋げて、取り込んだファイルやデータを分岐させたり繰り返したりして加工しながら、何らかの成果物を得て、終了すべきツールだ。
基本的に、外部からの入力を受け付けて何かするという処理じゃあない。
それは、シェルスクリプトを使う側が、スクリプトの中にカキコすればいいわけだ。
バッチファイルだからな。
それでも、人様に使っていただくテキストベースの仕掛けを書かなければならないとしたら、なかなか便利な仕組みには違いない。
カレンダー表示とかが出ると、ちょっとなごみ系になる(そうかあ?)。
なんか、少し、やる気が出てきたような気がするな・・・。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。