grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} を使用して IP アドレスのログファイル行を解析しようとしています。します。 。 [0-9]{1,3}' で、与えられた各行の最後の IP アドレスだけを抽出しようとします。
解析する2行の例:
Via: SIP/2.0/UDP 78.41.207.101:5237;branch=z9hG4bK-577783956;rport=5237
Via: SIP/2.0/UDP 127.0.0.1:5079;branch=z9hG4bK-1014230957;rport=5079;received=194.126.22.146
私は得る:
78.41.207.101
127.0.0.1
194.126.22.146
私が欲しいもの:
78.41.207.101
194.126.22.146
ご協力ありがとうございます。
ベストアンサー1
このsedを試すことができます
sed -E 's/.*[^0-9](([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/' infile
説明する:
-E 拡張正規表現を使用します。
-E がない場合は、次のようにコマンドを作成する必要があります。
sed 's/.*[^0-9]\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/' infile
(([[0-9]{1,3}.){3}[0-9]{1,3}) は RE と同じです。
<-------> !
1 3 time
'[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}''
<---------><---------><--------->
1 2 3
最初の部分.*[^0-9] は貪欲です。
行の最後の正規表現の前のすべての項目と一致します。
最後の.*は行の終わりと一致します。