文字列で最後のパターンを探す

文字列で最後のパターンを探す

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] は貪欲です。
行の最後の正規表現の前のすべての項目と一致します。
最後の.*は行の終わりと一致します。

おすすめ記事