次のファイルに表示される一連のIPアドレスを確認できる必要があります。
IP_SUBNETS=['10.1.111.0','10.2.111.0','10.2.123.0']
「、」で区切って一重引用符で囲むことでn個のIPアドレスを受け入れ、「リスト」全体が角かっこで開いて閉じる正規表現を作成したいと思います。
私は正規表現のbashの例を見つけましたが、busyboxで動作するものを見つけるのが困難です。
これが私が今まで持っているものです:
grep IP_SUBNETS myfile | cut -c 12- | grep '^\[[0-9].'
しかし、グループ化が正しくできないようです。別名サブネットごとに 1 つのグループです。
編集1
#!/bin/sh
iplist=['10.112.123.0']
pass="$(echo $iplist | grep -E '^\[(([0-9]{1,3}\.){3}[0-9]{1,3},)*([0-9]{1,3}\.){3}[0-9]{1,3}\]$'"
echo "$pass"
ベストアンサー1
ここでは、次の機能が機能します。
busybox grep -E '^\[(([0-9]{1,3}\.){3}[0-9]{1,3},)*([0-9]{1,3}\.){3}[0-9]{1,3}\]$'
(busyboxは私のデフォルトのgrepではないので、「busybox」プレフィックスが付きます)。
そうしなければならない最大完璧ではない場合でも、リストを確認してください。たとえば、300.1.2.4
IPアドレスを有効なアドレスとして受け入れます。正規表現は次のとおりです。完全ドットで区切られた4つの数字が有効なサブネット開始アドレスを表すことを確認するのははるかに複雑です。
分析してみましょう。まず、これらのいくつかが繰り返されることに注意してください。I
しばらくお待ちください。これにより、リスト全体が角かっこで囲まれた^\[(I,)*I\]$
カンマ区切りリストが提供されることがわかります。それが何であるかを見直すと、I
別の繰り返しパターンを見つけることがI
より簡単になります。それなら…10進数で区切られた4つのオクテットですね。もちろん、シェルスクリプトでは変数を使用してこれらの単純なビルディングブロックからパターンを構築することができます。([0-9]{1,3}\.){3}[0-9]{1,3}
O = [0-9]{1,3}
(O.){1,3}O
次のテストデータでテストしました(予測結果はテストデータファイルではなくコメントとして表示されます)。
1.2.3.4 # bad: no brackets
[1.2.3.4] # good
[1.2.3.44] # good
[1.2.3.4 # bad: missing bracket
1.2.3.4] # bad: missing bracket
[1.2.3.4,] # bad: empty item
[1.2.3.4,5.6.7.8] # good
[1.2.3.4,5.6.7.8,] # bad: empty item
[1.2.3.4,5.6.7.E] # bad: E is not a number
[1.2.3.4,,5.6.7.8] # bad: empty item
[1.2.3.1234] # bad: 1234 is more than 3 digits
編集:利用可能ですO = ([0-9]{1,2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])
。もっと簡単な方法があるかもしれませんが、わかりません。数字0〜255を使用すると、パターンが長くなります。
busybox grep -E '^\[((([0-9]{1,2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5]),)*(([0-9]{1,2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\]$'
...完全に検証することがどれほど重要かによって、それは価値があるかもしれませんし、そうでないかもしれません。