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.252
3番目のオクテットの最後の数字だけを変更し、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