2016-09-13 4 views
0

ファイアウォールのログファイルを解析しようとしていますが、ルータのアドレスが含まれていない行だけをソースとして取得しようとしています。ルータのアドレスは明らかに192.168.2.1で、コンピュータのアドレスは192.168.2.110です。全体の単語のgrep式

もし私がgrep -v 192.168.2.1と書くと、192.168.2.1で始まるので、私は宛先192.168.2.110を得られません。私が何も使っていなければ、私はフィルターをかけたいと思うルータから回線を得る。私は検索し、別の正規表現を試しましたが、私が何をするにしても、私はどちらかのアドレスを取得するか、どちらも取得しません。

+0

かを使用してパターンを囲みます(http://stackoverflow.com/questions/30470371/テキストの全文一致 - 単語のリスト - 単語のリストnoredirect = 1&lq = 1) –

答えて

1

のみ単語全体grep -wと一致するように、この力パターン。 [単語のリストを与えられたテキストのボディに全体ワードマッチング、]

grep -v -w 192.168.2.1 file 
192.168.2.110 

それとも\<pattern\>

grep -v '\<192.168.2.1\>' file 
192.168.2.110 
+0

これらはどちらもうまくいく、ありがとう。 – Andyc

+0

うれしかったです。 –

0

あなたは単語の境界と一致\bを使用しようとすることができます。まだ

grep -vP '\b192.168.2.1\b' 

またはより良い

grep -vP '\b192\.168\.2\.1\b' 

あなたはこれが動作するため-Pモードを必要としています。

+0

これら2つは素晴らしいことですが、ありがとうございます。なぜ、第二のバージョンが「より良い」という理由を説明できますか? – Andyc

+0

正規表現で特別な意味を持つ '.'文字をエスケープするので、他の文字と一致します。一方、 '\ .'はリテラル' .'とのみ一致します。 – redneb

関連する問題