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.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

관련 정보