-1

複数のファイルにある何千ものログ エントリを調べて、特定の単語を含む行を見つける必要があります。1 つの単語を含む行のリストから、行の一部である一意の文字列を含む行を除外する必要があります。

たとえば、以下のログ ファイルを参照してください。「Test」という単語を含むすべてのログ行を見つける必要があるとします。次に、"Test" という単語を含むすべての行の残りの行を見て、各イベントのインスタンスを 1 つだけ選択する必要があります。たとえば、「送信元 192.168.0.1 ポート 23 宛先 192.168.0.2 ポート 23」を含む行が 2 つある場合、残りの行が何であるかに関係なく、行の 1 つのインスタンスのみを記録したいと考えています。

4

1 に答える 1

0

*nix コマンドラインでは、grepがあります (実装によって若干異なります)。GNU/grep では、最初の一致で停止する "-m" スイッチがあります。

$ grep Test log.txt | grep -m1 'Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23'
-10-30-123-012-031-22 Test Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23 djlkdj

たとえば、ログファイルで「テスト」を検索し、特定の部分のみを処理するには、ログファイルをsedで「クリーン」にするのが好きです。

$ grep Test log.txt | sed 's/.*Test/Test/;s/ djlkdj$//' | sort | uniq -c
   4 Test Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23
   2 Test Source 192.168.0.1 Port 23 Destination 192.168.0.222 Port 25
   4 Test Source 192.168.0.1 Port 25 Destination 192.168.0.2 Port 23
   2 Test Source 192.168.5.1 Port 23 Destination 192.168.0.2 Port 23

これがあなたが望んでいたものかどうかはわかりません。

于 2013-08-11T01:03:09.640 に答える