2013-03-01 117 views
0

新的变量,我得到的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但我一直有一个像“有没有叫作文件...”

你能帮助我的错误?

回答

1

好了,给你的格式x.y.z.w有IP,你可以使用Perl的正则表达式:

$ echo "120.20.31.78" | perl -pe 's/(.*)\..*/$1\.123/' 
120.20.31.123 

这将repace最后一个数字( “78”)与 “123”。

所以,你的情况(假设你的 “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/' 
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 
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"