試行錯誤の結果

上のが中途半端に何書いてるか分からない状態だったのでもう少し落ち着いて書きなおした。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

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