用其他变量Bash新变量

时间:2013-03-01 18:26:45

标签: bash sed

我得到了这样的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,但我总是有错误,比如“没有文件调用......”

你能帮助我吗?

3 个答案:

答案 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