ルータやスイッチのログからホスト名、シリアルナンバー、ファームバージョンを抜き出したい時がある。
それをrubyで抜き出すコードを記載する。
hostname_serial_firm.rb
#カレントフォルダ内のtxtファイル名情報を配列として取得
filelists = Dir.glob("*.txt")
host_serial_os=[]
filelists.each do |filename|
#ファイルを読み込みモードで開く
File.open(filename,"r") do |file|
#ファイルを一気に読み込む
#puts filename
file = file.read
#行頭がhostnmae、行末まで全部を[\s\S]*?$ で表現
# ⇒[\s\S]*?$について、[\s\S]で全文字、それが0回以上続くで「*]、?で最短マッチ、$で行末
# ?がないと、最長一致なので、最後まで全部含まれてしまう
if file =~ /^hostname ([\s\S]*?$)/
hostname=$1
end
if file =~ /^version ([\s\S]*?$)/
os = $1
end
if file =~ /^serial-number S\/N: ([\s\S]*?$)/
serial=$1
end
#カンマ区切りで出力する
puts "#{hostname},#{serial},#{os}"
end
end
上記コードで、以下テキストファイルからホスト名,シリアルナンバー、OSバージョンを抜き出すことができる。
test.txt
hostname abc-router test test f;asdjf;dkslajf; version 1.9.1 abcdeffdlsakjflsdkfj;lasfj;lsdajf dddd fdsaf;sjdkfljsa serial-number S/N: 192168100101 end
結果(カンマ区切りで出力される)
abc-router:192168100101:1.9.1
リンク