IPを変換するより良い方法は何ですか?

IPを変換するより良い方法は何ですか?

10.AB.C9.XYZに変換しようとしています10.AB.C2.252

今、各文字を抽出して一緒にリンクしています。

ip_main=10.AB.C9.XYZ

A_char=${ip_main:3:1}
B_char=${ip_main:4:1}
C_char=${ip_main:6:1}

new_ip="10.${A_char}${B_char}.${C_char}2.252"

これを達成するより良い方法はありますか?

答え1

2.2523番目のオクテットの最後の数字だけを変更し、4番目のオクテットの合計数字を次に変更したい場合

new_ip=${ip_main%?.*}2.252

$ip_mainこれにより、一致から最短のサフィックス文字列が削除され、結果に追加さ?.*れます。2.252このモードを使用した交換は、常に3番目のオクテットの最後のビット、3番目と4番目のオクテットの間の点、および4番目のオクテット全体に影響します。

テスト:

$ ip_main=10.AB.C9.XYZ
$ new_ip=${ip_main%?.*}2.252
$ printf '%s\n' "$new_ip"
10.AB.C2.252

答え2

3番目のオクテットから7を引いて4番目のオクテットを変更できます。

echo 10.11.19.44 | awk -F. '{OFS=FS; print $1,$2,$3-7,252}'
10.11.12.252

この手順は、変更するIPアドレスのリストがある場合に最も効果的です。

答え3

そしてsed

sed 's/[^.][.][^.]*$/2.252/'
ip="10.AB.C9.XYZ"
echo "$ip" | sed 's/[^.][.][^.]*$/2.252/'
10.AB.C2.252

関連情報