web-dev-qa-db-ja.com

IPアドレスの照合に使用できる正規表現は何ですか?

次のgrep構文を使用して、ファイル内のすべてのIPアドレスを一致させたい(kshスクリプトから)

  grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file

問題:4オクテット以上の単語(IP)にも一致します。

1.1.1.1.1 

または

192.1.1.1.160

どうやって有効なIPと4オクテットのIPアドレスだけを一致させることができますか? grepが機能しない場合、私はPerlも使用することができます - 1行の構文ソリューション。

35
jennifer

これを試して:

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

これは0.0.0.0から999.999.999.999までのすべての式に一致します

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

あなただけのIPアドレスを取得します

注:
solarisではおそらくegrepがその仕事をするでしょう。

56
udo

これはどうですか。

Perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' /etc/hosts
10
Joe Casadonte

-w / --Word-regexp 

grepにflagを指定すると、Wordの境界でのみ一致するようになります。つまり、一致は空白で囲まれるか、行の最初/最後で開始/終了する必要があります。

5
Dominik George
if [ ` echo $ip | '^((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)$'  | grep -o "\." | wc -l` -eq 1 ];
then ipv4=true;
else 
ipv4=false;
5
Arnaud B.

正確に4オクテットの一致を見つけるには(1.1.1.1.1のようなものを除く)、これを使います:

grep -P '(?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)'

非IPアドレスを検出することはありません。式はより多くのことを検証するためにより複雑になる可能性がありますが、これはほとんどの場合に機能するはずです。 010.1.12.1はIPアドレスを書き込むための一般的な方法ではないため、先行する0とは一致しません。

5
Stefan Seidel

少しトリッキーですが、うまくいくはずです。

( X='\([0-9]\{1,2\}\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)' ; grep "\([^\.]\|^\)$X\.$X\.$X\.$X\([^\.]\|$\)" file )
3
cYrus

grep -E '^((25 [0-5] | 2 [0-4] [0-9] | [1]?[1-9] [0-9]?)。){3}(25 [ 0-5] | 2 [0-4] [0-9] | [1]?[1-9]?[0-9])$ '

Arnaud Bの答えの修正版。

この式は、先頭の0を持つIPアドレスとは一致しません。たとえば、192.168.1.01とは一致しません。この表現は、4オクテットを超えるIPアドレスとは一致しません。たとえば、192.168.1.2.3とは一致しません

0
Thomas

TCLでIPアドレスを照合するための正規表現

"192.168.10.25"を設定

if {[regexp
{^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$} $a]} 
{
    puts "yes"
}
0
abhilash.malla

行頭のIPアドレスを一致させるためにegrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hostsを使用しています。 ^なしで使用して、IPアドレスの前に空白や他の文字を入れることもできます。

[0-9]{1,3} --> this matches a number between 1 and 999.
\. --> this is to add the dot.
([0-9]{1,3}\.){3} --> get a number with a dot 3 times.
[0-9]{1,3} --> finally add the fourth number.
0
Falk

grep -Eo '([0-9] {1,3}。?){4}'

例:curl http://korben.info/ip | grep「IPの見える部署」 grep -Eo '([0-9] {1,3}。?){4}'

0
user2357585

長い正規表現の短いバージョン:

egrep '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}' 

ご使用のOSのバージョンに応じて、grep -Eまたはegrepを使用してください。

0
Suhail