我得到了这样的IP地址:
Ip=`ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | \
tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2`
我有一个像这样的ip:10.1.0.76
我想用Ip变量创建一个新变量来生成另一个ip,例如我的新变量将返回:10.1.0.178
只是最后一个数字更改,所以我想获得Ip变量(10.1.0。)的一部分,并在最后添加另一个数字。
我尝试使用sed,但我总是有错误,比如“没有文件调用......”
你能帮助我吗?
答案 0 :(得分:2)
您可以使用参数扩展:它只是:${Ip%.*}.178
${Ip%.*}
是最后一个点的ip以及删除后的所有内容。 .178
是您想要追加的内容。
这是在上下文中:
# Your original expression
Ip=`ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | \
tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2`
# assign a new variable with the ip with different end octet
newIp=${Ip%.*}.178
# Show new ip
echo "$newIp"
答案 1 :(得分:1)
好吧,假设您的格式为x.y.z.w,您可以使用perl regex:
$ echo "120.20.31.78" | perl -pe 's/(.*)\..*/$1\.123/'
120.20.31.123
这将使用“123”重新表示最后一个数字(“78”)。
因此,在您的情况下(假设您的“Ip”变量设置正确),它将是:
Ip=ifconfig | grep inet | grep -v -E 'inet6|127.0.0.1' | tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2 | perl -pe 's/(.*)\..*/$1\.123/'
答案 2 :(得分:0)
看到这个,我希望这是你想要的:
kent$ echo $ip
10.1.0.76
kent$ echo $part
178
kent$ sed -r "s/(.*\.).*/\1$part/" <<< $ip
10.1.0.178
用新值设置$ ip:
kent$ ip=$(sed -r "s/(.*\.).*/\1$part/" <<< $ip)
kent$ echo $ip
10.1.0.178