0

ログ ファイルに 1 つのテキストがあるかどうかを確認する必要があります。たとえばserver crashed、他のテキストが続いていないserver is up again場合です (そのような場合は、サーバーを手動で起動する必要があるため)。もちろん、これらのテキストの間には多くの異なる行が存在する場合があります。シンプルなLinuxコマンドラインツールを使用したい. pcregrep でも正規表現の作成に失敗しました

4

5 に答える 5

1

このような単純なステート マシンの awk が好きです

awk '
    /server crashed/ {is_crashed=1}
    is_crashed && /server is up again/ {is_up_again=1; exit}
    END {
        if (! is_up_again) {
            print "Oops, crashed and NOT up again"
            exit 1
        }
    }
' filename
于 2013-06-13T23:58:18.983 に答える
0

否定的な先読みアサーションで Perl の正規表現を使用できます (grep がそれを行うかどうかはわかりません)。

$ cat check.pl
$/=""; 
my $line = <>; 
$line =~ /(server crashed)(?!.+server is up again)/sg; 
print "$1\n";

$ perl check.pl < file_with_crash
server crashed

$ perl check.pl < file_with_crash_and_restart
$ # Nada
于 2013-06-13T21:01:36.010 に答える
0

次のコマンドは、最後のサーバー クラッシュが発生した行番号で始まる単一行の出力を提供します。

grep -n 'server crashed' server.log | tail -n 1

次に についても同じことを行いserver is up again、行番号を比較します。

于 2013-06-13T21:10:02.380 に答える