![如何使用 sed 更改最后一个值(IP 地址)](https://linux22.com/image/119336/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E6%9B%B4%E6%94%B9%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E5%80%BC%EF%BC%88IP%20%E5%9C%B0%E5%9D%80%EF%BC%89.png)
我使用以下命令行读取当前的 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”。请注意我如何使用 ':' 作为 sed 命令的分隔符s
,以便我可以使用未转义的 '/'。
或者一直使用 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}'