使用 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
如果 #
按预期工作,请删除它。
有一个系统变量 $HOSTNAME
与 hostname
命令相同。因此,如果您的主机名包含一个 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
我想在 /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
如果 #
按预期工作,请删除它。
有一个系统变量 $HOSTNAME
与 hostname
命令相同。因此,如果您的主机名包含一个 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