使用 bash 和 sed 如何从主机名命令中提取 ip 并将其保存在 /etc/hosts 文件中

using bash with sed how to extract ip from a hostname command and saving it in /etc/hosts file

我想在 /etc/hosts 文件中为我所在的盒子的 IP 存储一个条目。

当我 运行 以下命令时,我得到:

:-$ hostname
ip-10-55-9-102

我想将此条目存储在 /etc/hosts 中,如下所示:

预期结果:10.55.9.102 ip-10-55-9-102

我试过了,但到目前为止....

当前解决方案:

ip=$(hostname -I | cut -d ' ' -f1); echo "$ip ip-${ip//+([.:])/-}" >> /etc/hosts

实际结果:10.55.9.102 ip-10.55.9.102

注意:预期有“-”,实际有“.”在数字之间。

您的逻辑很好,但是您在字符串替换中没有使用正确的模式。您应该写下以下内容:

ip=$(hostname -I | cut -d ' ' -f1); echo "$ip ip-${ip//[.:]/-}" >> /etc/hosts

使用 awk 怎么样?

hostname | awk -F- '{printf "%s.%s.%s.%s %s\n", , , , , [=10=]}' >> /etc/hosts

awk 命令使用 -F- 标志将破折号指定为字段分隔符。 printf 命令选择字段 #2、3、4、5 以及整行的 $0。

与普通 bash:

ip=$(hostname -I)
ip=${ip%%[[:space:]]*}
printf "%s\tip-%s\n" "$ip" "${ip//./-}" # >> /etc/hosts

如果 # 按预期工作,请删除它。

有一个系统变量 $HOSTNAMEhostname 命令相同。因此,如果您的主机名包含一个 IP 地址,您可以这样做:

ip=${HOSTNAME//ip-} # create 'ip' var from $HOSTNAME and remove 'ip-'
ip=${ip//-/.}       # change '-' to '.' in 'ip' var
printf "$ip\t$HOSTNAME" >> /etc/hosts # add desired string to /etc/hosts

或者使用hostname获取ip:

ip=( $(hostname -I) )
printf "$ip\t$HOSTNAME" >> /etc/hosts