Dockerネットワークで見つかったIPv4アドレスを一覧表示する正規表現を作成します。

Dockerネットワークで見つかったIPv4アドレスを一覧表示する正規表現を作成します。

こんにちは、dockerネットワークの特性を確認するためにコマンドを使用している間にdocker network inspect network59ipv4アドレスがあることを発見し、そのコマンドの結果で特に見つかったIPv4アドレスを一覧表示する正規表現を作成したかったのです。

助けてくれてありがとう。

答え1

正規表現についてはわかりませんが、jq役に立ちます。一重引用符で囲むことでjsonpathを渡すことができます。

次のコマンドは、以下に示すjsonに対して機能してゲートウェイを抽出します。

$ docker network inspect bridge | jq -r '.[0].IPAM.Config[0].Gateway'
172.17.0.1
[
    {
        "Name": "bridge",
        "Id": "f6daefc7df41c4ddb9c1620b57986b9b65bb4c9afa939af2b6baa6ef7be0f23f",
        "Created": "2023-11-14T10:31:54.319592088Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1454"
        },
        "Labels": {}
    }
]

答え2

Perlモジュールには、Regexp::Common4次表記のIPv4アドレスを含む多くの一般的なエントリと一致する正規表現ライブラリがあります。

docker... | perl -MRegexp::Common=net -lne 'print for m{$RE{net}{IPv4}}g'

有効なIPv4アドレスなので、231.2.3.45内部的に検索されます。v1231.2.3.456.7この IP アドレスにいくつかのコンテキストを追加すると便利です。たとえば、IPアドレスの前"または空白のみ、後ろに"空白のみ、または空白のみを含めることを制限できます/

docker... | perl -MRegexp::Common=net -lne '
   print for m{(?<=["\s])$RE{net}{IPv4}(?=["\s/])}g'

ドットで区切られた4進形式のIPv4アドレスに似た値を持つJSON文字列を報告するには、次の手順に従ってください。

docker... | jq -r '
  ..|strings|select(test("^\\d{1,3}(\\.\\d{1,3}){3}\\z"))'

Regexp::Common(許容されるので厳密な一致ではありません999.888.777.666)。

関連情報