正規表現

Ruby 正規表現 テキストから文字を抜き出す

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

-正規表現