grepがIPを見つけましたが、最後のオクテットはゼロではありません。

grepがIPを見つけましたが、最後のオクテットはゼロではありません。

複数のネットワークで生成されたリストからIPを抽出しようとしていますが、そのIPを分離する必要があります。欲しくない0で終わります。

たとえば、以下のリストにはテキスト、一般IP、IP範囲があります。私が望むのは、ゼロまたはサブネットマスクで終わるIPではなく、通常のIPだけを取得することです。

; Spamhaus DROP List 2016/07/03 - (c) 2016 The Spamhaus Project
; http://www.spamhaus.org/drop/drop.txt
; Last-Modified: Sun,  3 Jul 2016 21:18:32 GMT
; Expires: Sun, 03 Jul 2016 23:26:45 GMT

1.0.1.0/24
223.223.176.0
129.130.100.100
1.160.118.30

走ればgrep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

それは私に以下を与えます:

1.0.1.0
223.223.176.0
129.130.100.100
1.160.118.30

正規表現の最後の部分を次に変更しようとしました。

grep -Eo '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[^1-255]'

しかし、うまくいきません。

検索プロセスを高速化するために、grep(またはsed / awk)に対する複数のパイプラインの使用を最小限に抑えるよう努めています。たとえば、私が避けたいものは次のとおりです。

grep <all IPs from list> | grep -v <all those that end in 0 or subnet> 

これらのIPを取得するために1行にgrep / sed / awkを使用できますか?上記の例では、結果は次のようになります。

129.130.100.100
1.160.118.30

ありがとう

ベストアンサー1

あなたは試すことができますawk

$ awk -F . '$NF !~ /^0/' <file
129.130.100.100

おすすめ記事