pepoとネットワークを語ろう

40年前からこれまでとこれからのネットワークを語る

おー、グレップ grep grep -F grep -E

2010-04-22 07:30:50 | Linux

近頃、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