ルータやスイッチのログからホスト名、シリアルナンバー、ファームバージョンを抜き出したい時がある。
それを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
リンク