sed를 사용하여 마지막 값(IP 주소)을 변경하는 방법

sed를 사용하여 마지막 값(IP 주소)을 변경하는 방법

다음 명령줄을 사용하여 현재 IP 주소를 읽습니다. 그런 다음 마지막 값을 0/24로 바꿔야 합니다. 현재 IP는 192.168.178.1입니다. 192.168.178.0/24의 var 값을 바꿔야 합니다.

귀하의 지원과 안부 인사에 감사드립니다!

 varip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/' )

답변1

마지막으로 다음 sed 코드를 사용하십시오.

sed 's:[^.]*$:0/24:'

"."을 포함하지 않는 마지막 부분 문자열을 "0/24"로 바꾸는 방식으로 작동합니다. s이스케이프되지 않은 '/'를 사용할 수 있도록 sed 명령의 구분 기호로 ':'을 사용하는 방법에 유의하세요 .


아니면 항상 sed를 사용하세요 :)

ip addr | sed -rn '/state UP/{n;n;s:^ *[^ ]* *([^ ]*).*:\1:;s:[^.]*$:0/24:p}'

답변2

이 시도:

ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/' | sed 's/\.[0-9]*$/\.0\/24/'

하지만 꼭 그럴 필요는 없습니다 . cut다음으로 바꾸세요 .sed

ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | sed 's/\.[0-9]*\//\.0\//'

이 명령은 동일한 출력을 반환합니다.

그리고 그것은 필요하지 않습니다 . tail또한 다음으로 바꾸십시오 .sed

ip addr | grep 'state UP' -A2 | awk '{print $2}' | sed '$!d;s/\.[0-9]*\//\.0\//'

하지만최단 경로사용하는 것입니다 hostname:

hostname -I | tr -d " " | sed 's/[0-9]*$/0\/24/'

출력은 동일합니다.

답변3

Your-IP-Adress/24를 얻으려면 다음 명령을 사용하십시오.

ip addr | grep inet | egrep /24 | awk '{print $2}'

답변4

그냥 awk를 사용하세요:

ip a | awk '/state UP/{nr[NR+2]}; NR in nr {gsub(/\.([0-9]+)\/([0-9]+)/,".0/24"); print $2}'

관련 정보