2017-10-27 6 views
1

私は、ファイルが本当にその中のコンテンツに必要なものかどうかを判断する方法を探しています。ファイル内の内容でファイルを定義します

セキュリティとメッセージの例のファイル。ファイル安全なが本当に安全なであることを

は/ var/log /安全な

Oct 27 06:45:32 host sshd[16609]: Accepted publickey for username from 11.22.33.1 port 57870 ssh2: RSA SHA256:XXXXXX 
Oct 27 06:45:32 host sshd[16609]: pam_unix(sshd:session): session opened for user username by (uid=0) 
Oct 27 06:45:46 host sudo: username : TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/bin/su 

の/ var/log/messagesに

Oct 27 03:51:01 host systemd: Started Session 1000 of user root. 
Oct 27 03:51:01 host systemd: Starting Session 1000 of user root. 
Oct 27 03:54:01 host systemd: Started Session 1001 of user root. 

それが知ることができますまたはメッセージは実際にはです。メッセージes

おそらくそれは、キーワード

filename = "/var/log/messages" 
message_words = ["systemd", "kernel", "freshclam"] 
if File.file?(filename) then 
    File.open(filename, 'r') { |f| @w = f.read() } 
    message_words.each do |x| 
    puts "pass" if @w.include?(x) 
    end 
end 

でファイルを定義するために理にかなっているか、いくつかのテンプレートのためにそれを行う方法はありますか? PATTERNRegexpのインスタンスである

+3

_ "特定のパターンに一致" _ - どのパターン? – Stefan

+0

はい。正規表現は、「特定のパターンと一致する」というフレーズが含まれている質問を開始するのに適しています。 –

+0

それが '場合File.open(my_log_file、 'R')することができreadlineの最初の行に常にあった場合は[ 'ホストはsystemdに:']。あなたのコード end'の #レスト ないと、あなたの場合はログファイルは大きく、この文字列の最初の出現を確認するためだけにファイル全体を読み取る必要はありません。文字列が見つかるまで、ファイルの読み込みを怠るでしょう。 'if File.open(my_log_file、 'r')。each_line.any? {|行| [[host systemd: ']]} #残りのコード end' – peter

答えて

1
File.open('file.txt').read =~ PATTERN 

//を使用してパターンを指定できます。だから、例えば:

File.open('file.txt').read =~ /foo|bar/ 

は、ファイルの内容が"foo"またはそれで"bar"があった場合にのみ、非nilの値を返します。

関連する問題