テキストファイルからIPをGrepしてフィルタリングします。

テキストファイルからIPをGrepしてフィルタリングします。

ログファイルがありますが、ファイルから特定のIPを抽出したいと思います。ログファイルは次のとおりです。

ここに画像の説明を入力してください。

ログファイルの場合、各行IPの最初の部分だけを取得したいとし、以下で試すすべてのコマンドは、私が望んでいない多くのIPを含む結果を得ます(grep -E -o "([0-9] {1、 3}[.]){3}[0-9]{1,3}" < honeylog.txt ) > 出力.txt

出力.txtは次のようになります。

ここに画像の説明を入力してください。

しかし、私が望む唯一のIPは、最初の部分である192.168.80.12です。各行のgrepが最初の結果に達するようにし、すぐに2行目に移動してgrepを再起動する方法はありますか?

ベストアンサー1

次のようにgrepを設定してみてください。grep -Po '(?<= - )[^ ]*'

使用しているシステムの種類によって異なります... - Poはmac osxでは機能しませんが、centosではうまく機能します。

[rust@JBLGSMR001 ~]$ cat data.txt
2017-06-07-17:44:45.5903 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5904 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5905 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5906 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5907 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5908 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5909 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
[rust@JBLGSMR001 ~]$ cat data.txt | grep -Po '(?<= - )[^ ]*' >> output.txt
[rust@JBLGSMR001 ~]$ cat output.txt
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12

おすすめ記事