Bash:IPv4アドレスの4つの部分のうちの1つを抽出する

Bash:IPv4アドレスの4つの部分のうちの1つを抽出する

構文を使用して、IPv4アドレスの最後の部分と最初の部分を抽出でき${var##pattern}ます${var%%pattern}

IP=109.96.77.15
echo IP: $IP
echo 'Extract the first section using ${var%%pattern}: ' ${IP%%.*}
echo 'Extract the last section using ${var##pattern}: ' ${IP##*.}

パラメータ拡張を使用してIPv4アドレスの2番目または3番目の部分をどのように抽出できますか?

これが私の解決策です。配列を使用してIFS変数を変更します。

:~/bin$ IP=109.96.77.15
:~/bin$ IFS=. read -a ArrIP<<<"$IP"
:~/bin$ echo ${ArrIP[1]}
    96
:~/bin$ printf "%s\n" "${ArrIP[@]}"
    109
    96
    77
    15

また、およびコマンドを使用していくつかのawkソリューションを作成しました。sedcut

今私の質問は:より簡単な解決策はありますか?パラメータ拡張配列とIFSの変更を使用しないものは何ですか?

ベストアンサー1

IFSのデフォルト値を想定すると、次のように各オクテットを独自の変数に抽出できます。

read A B C D <<<"${IP//./ }"

または配列に入れます。

A=(${IP//./ })

おすすめ記事