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,但我总是遇到诸如“没有文件调用...”之类的错误

你能帮助我吗 ?

4

3 回答 3

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"
于 2013-03-01T19:02:52.600 回答
1

好吧,假设你有 xyzw 格式的 IP,你可以使用 perl 正则表达式:

$ 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/'
于 2013-03-01T18:30:18.680 回答
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
于 2013-03-01T18:31:49.533 回答