ログファイルをシェルを使って管理することになっている。このファイル名をいじくりまわす時に色々なやり方があるが、特によく使った2つについてメモ。
ここでは、ローテーションして圧縮したっぽい、次のログファイル名を例として用いる。
_file_full_name="abc_12345678.log_20110812.gz"
1) ファイル名から特定の文字列を抽出する
ほんと、sed さんは便利で、正規表現で ( ) 内に一致した値を“\1、\2、…”で参照できる。
ログファイル名に、ローテーションなりアーカイブなり圧縮した日付をつけて管理している時には、よく使うと思う。
# _file_full_nameの(最後に一致する)数値8桁 _file_yyyyMMdd=`echo ${_file_full_name} | sed -e "s/.*\([0-9]\{8\}\).*/\1/g"`
“20110812”が取得できる。
2) ファイル名をメイン部分と拡張子に分割する
ほんと、展開の演算子くんは便利で、コレだけでいける。
# _file_full_name の末尾にマッチした文字列のうち、最短の文字列を削除 _file_main_name=`echo ${_file_full_name%.*}` # _file_full_name の先頭にマッチした文字列のうち、最長の文字列を削除 _file_extention=`echo ${_file_full_name##*.}`
“abc_12345678.log_20110812”と“gz”が取得できる。
まぁ、、これだけ*1。
*1:なんだけど、これでまた5年くらいシェル書かないからさ、きっと。基本的なことすら忘れるわけよ。