試行錯誤の結果
上のが中途半端に何書いてるか分からない状態だったのでもう少し落ち着いて書きなおした。expectのところにパイプを繋げてみた。あとはdiffして切り貼り。落ち着いた。
#!/bin/sh expect << EOS | tr -d '[\r\000]' | tr -s '\n' | grep -E "^[0-9]{2}([0-9]{2}/?){3}" > ~/tmp/router_new.log spawn telnet 192.168.62.1 expect login send -- "admin\r\n" expect "Password: " send -- "yourpassword\r\n" expect ">" send -- "show log sys\r\n" expect "\r\n\r\n\r\n" send -- "exit\r\n" EOS \diff ~/tmp/router{_new,}.log \ | sed -e "/^[^<]/d" -e "s/^< //g" >~/tmp/router_diff.log #| grep "^<" | cut -d" " -f2- > ~/tmp/router_diff.log cat ~/tmp/router_diff.log >>~/tmp/router.log
sedの相応場面
sedコマンドで改行コードを削除してテキストを一列にする 方法 【OKWAVE】 曰く空行の削除(=\nの圧縮)はtrのまんまのほうが適切らしい。
以下のは最初のtrをまとめてるつもりなんだけど空行の削除がうまくいってない。なんで?
sed -e "s/[\x00\x0d]//g" -e "s/\x0a{2}/\x0a/g"
Atermの設定でsyslog飛ばせるってさ
http://miyazaki.ddo.jp/mt3/blog/fedora_core6/20070209-2347.html
まあ、自分の場合syslog飛ばす先が常時起動じゃないからいいんだけどさー。ちょっと悔しい
Atermルータのログまとめ
コマンド(telnet in WBR75H - Tatsuyoshi tech diary)を送ると適当に楽しい動作をするAtermルータだけどちょっと動作確認がしたくなったのでログを手元のマシンで管理したくなった。ただsyslogdは入ってるっぽいけどAterm専用コマンドを通して一定件数のログを取る以外何もできない?
ルータ本体が保持できる件数を超えると古いログは破棄されるので、シェルスクリプト書いてなんとかしてみた。
せっかくなので貼ってみる
行数固定のところとか、awk使ってるとか、空行消すとことか、インデントとか、全然スマートさが感じられないけど。ちなみにdiffはいつもcolordiffにaliasしてたのでawkでなかなかマッチしなくてはまったので\を入れといた。 sed -e '/\000/d' -e '/\0a/d' -e '/^$/d'とかしてコマンド一個(trでもいいんだけど) にしたいけどうまくいかない。
#!/bin/sh expect > ~/tmp/router_new.log << EOS spawn telnet 192.168.0.1 expect login send -- "admin\r\n" expect "Password: " send -- "yourpassword\r\n" expect ">" send -- "show log sys\r\n" expect "\r\n\r\n\r\n" send -- "exit\r\n" EOS cat ~/tmp/router_new.log | cut -d" " -f14-414 | tr -s '[\r\000]' '\n' > ~/tmp/router_new.log \diff -a ~/tmp/router{_new,}.log|grep -v "^<" | cut -d" " -f2- > ~/tmp/router_diff.log cat ~/tmp/router_{new,diff}.log >~/tmp/router.log