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
세 번째 옥텟의 마지막 숫자만 바꾸고 네 번째 옥텟의 전체 숫자를 다음 으로 바꾸고 싶은 경우
new_ip=${ip_main%?.*}2.252
$ip_main
이렇게 하면 일치 항목에서 가장 짧은 접미사 문자열이 제거되어 결과에 ?.*
추가됩니다 . 2.252
이 모드를 사용한 교체는 항상 세 번째 옥텟의 마지막 비트, 세 번째와 네 번째 옥텟 사이의 지점, 그리고 전체 네 번째 옥텟에 영향을 미칩니다.
시험:
$ ip_main=10.AB.C9.XYZ
$ new_ip=${ip_main%?.*}2.252
$ printf '%s\n' "$new_ip"
10.AB.C2.252
답변2
세 번째 옥텟에서 7을 빼고 네 번째 옥텟을 바꿀 수 있습니다.
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