2017-07-27 7 views
0

こんにちは私は次の単語のログファイルを検索し、一致する数を変数として数値として割り当てようとしています。特定のフレーズを除いて、grepでファイル内の検出された文字列を数えたい

errors 
error 
fail 
failure 
can't 

しかし、そのは、「いいえ」

が付け加えだから、その「エラーなし」場合は、エラーを無視し、その「エラーなし」

場合、エラーを無視する場合、私は言葉のエラーやエラーを一致させる必要はありませんここで

は、私がこれまで

ErrorCheck=$(grep -vi "No errors" $LOGFILE | grep -ciE "error|fail|can't" $LOGFILE) 

そのは、残念ながら私のために働いていないものだ、任意の提案は素晴らしいことです。

PS Iは、busyboxのシェルを実行しているmicrocoreを使用していますので、私はで動作するようにややリーンな環境を持っている。すべてのコメントや提案を歓迎し

を。

ありがとうございます。

+0

ログファイルを書き込むプログラムを変更できますか? – hek2mgl

+0

@remusサンプルログファイルを追加して、あなたが期待していたものと何か期待どおりの結果を表示したほうがいいでしょう...そのようなことがうまくいかないと、何が間違っているのか、 – Sundeep

+0

あなたの権利は、それについて申し訳ありません。バックアップが発生した後に送信される電子メールログファイルのサンプルを示します。 - うーん、ここでコンテンツを取得することができないようですが、限界です。問題は1行だけです(/mnt/hda1/temp/*****.zipの圧縮データでエラーは検出されません)。 )したがって、私のチェックは、肯定的なものとして(エラーなし)を見つけることです。私はどのように考え出すことができる場合、私のシェルスクリプトからすべてのコードを投稿したいと思います。 – remus

答えて

0

grepの "-v"フラグは、基本的に 'エラーなし'または指定した他の文字列を含む行全体を省略することが1つの問題だと思います。たとえば、1行に「失敗なし」と「できない」の両方が含まれていると、問題が発生します。

これを行うには、3つの異なる変数に値を格納する方法があります.NUM_COUNTEDマイナスNUM_NOTS = ErrorCheck。「失敗なし」と同じ行に実際のエラーインジケータがあることを考慮する必要があります。 。

NUM_COUNTED=grep -ciF 'error 
fail 
can't' $LOGFILE 
NUM_NOTS=grep -ciF 'no error 
no fail' $LOGFILE 
ErrorCheck=`expr $NUM_COUNTED - $NUM_NOTS` 

また、これは(主に正確な)結果を与えているように見える:

ErrorCheck=$(grep -vi 'No errors' $LOGFILE | grep -ciF 'error 
fail 
can't' $LOGFILE) 

-Fフラグがちょうど(エラーは、失敗し、できない)文字列リテラルを探すためにはgrepを伝えています改行が区切られています。

これが役に立ちます。

+0

これまでのところ、RegExソリューションでは不運でした... ErrorCheck = $(grep -vi)というオリジナルのコードで間違いが発生しましたエラーなし "$ LOGFILE | grep -ciE" error | fail | can ' $ LOGFILE | grep -ciE "エラー|失敗|"できません ")が働いています。私が発見したもう一つの問題は、busyboxと呼ばれるashシェルは、lookbehinds、lookaheads、grepのlookaroundをサポートしていないようです。 – remus

関連する問題