近頃、openmicroserverのRemote-Hand開発で
webUIを意地でPHPなど使わずshellのみで頑張って書いているが
ずいぶんと前から悩でいたものが解決した、それはgrepのマジック
と言うか私が知らんかったやけど
# cat QDATA
di_change[0]=high2low
di_act[0]=DON_0
don_time[0]=1
di_telno[0]=
di_mail[0]=
di_change_reg[0]=none
di_change[1]=high2low
di_act[1]=DOFF_0
don_time[1]=2
di_telno[1]=
di_mail[1]=
di_change_reg[1]=none
di_change[2]=high2low
di_act[2]=DON_1
don_time[2]=3
di_telno[2]=
di_mail[2]=
di_change_reg[2]=none
てなファイルがあり、これを既ファイルがあれば旧変数に関する行を削除して、新しい情報に書き換えするといった処理
for n in 0 1 2 3 4 5 6 7; do
if [ "${di_change_reg[$n]}" != "none" ];then
if [ -e "$DICH" ];then
cat "$DICH" | grep -F -v [$n] >"$tDICH"
mv "$tDICH" "$DICH"
fi
if [ "${di_change_reg[$n]}" = "reg" ];then
echo "di_change[$n]=""${di_change[$n]}" >>"$DICH"
echo "di_change[$n]=""${di_change[$n]}" >>"$sDICH"
echo "di_act[$n]=""${di_act[$n]}" >>"$DICH"
echo "di_act[$n]=""${di_act[$n]}" >>"$sDICH"
・・・なんやかんやの処理
fi
done
上記でうまくいくが
最初は、grep -F 無しでこんな感じでやっとたら
# cat QDATA |grep -v [1]
di_change[0]=high2low
di_act[0]=DON_0
di_telno[0]=
di_mail[0]=
di_change_reg[0]=none
di_change[2]=high2low
don_time[2]=3
di_telno[2]=
di_mail[2]=
di_change_reg[2]=none
そんな、 don_time[0]=1 が削除されてしまう・・・中々気が付かなかったが
grep -F [0]
は検索文字 [0] を正規表現を適応せずに、文字列として扱うのでうまくいく
逆に、正規表現として文字列を検索したい場合は
ls /var/tmp/|grep -E 'dio[0-3][low|high]'
な、ぐあいだ
pepoと