-f、-i、および -v オプションを指定して grep を使用したいと考えています。次の内容のパターン ファイルがあります。
vchkpw-pop3
vchkpw-送信
user_unknown
unknown_user
address_rejected
no_
such_user does_not_exist
invalid_recipient
mailbox_unavailable
user_not_found
no_mailbox_here
そして、qmail メールのログ ファイルを処理しているときに、上記の用語をすべて除外したいと考えています。
Grep 2.5.1 を使用すると、3 番目の位置から始まるどのパターンでも機能しないようです。
メールログ ファイルを解析するために、1 行の bash コードを使用しています。以下の行を参照してください。
cat /var/log/maillog | tai64n2tai | awk '{$1="";$2="";$3="";$4="";$5="";print}'
| grep -v vchkpw-pop3 | grep -v vchkpw-submission | awk '{sub(/^[ \t]+/,"")};1'
| qlogselect start $STARTDAY end $ENDDAY | matchup > $QMAILSTATS 5>/dev/null
パイプで複数の grep -v "sometext" を使用する代わりに、代わりに grep -vif patterns.txt を使用したかったのです。
ただし、私の問題は、私のバージョンの grep では、パターンにアンダースコア (_) が含まれている場合、f オプションと i オプションを一緒に使用できないことです。アンダースコアを削除すると、パターンは期待どおりに一致します。
メールログを解析するときに省略したい行の例を次に示します。
Sep 20 15:46:50 m qmail: 1348123610.323831 delivery 11150428: failure: 204.119.19.51_does_not_like_recipient./Remote_host_said:_550_5.1.1_User_unknown/Giving_up_on_204.119.19.51./
エラー メッセージは、接続しているメール サーバーに依存するため、パターン user_unknown に大文字が含まれている場合と含まれていない場合があります。
誰もがより良い解決策を持っていますか?
1行のbashコマンドを毎回編集する必要がなく、ファイルからパターンを追加/削除するだけでよいというアイデアが気に入っています。