在 Sed 中插入 Shell 命令输出并替换现有文件行

Insert Shell Command Output in Sed and replace existing file line

我正在尝试创建一个 shell 脚本,它需要 运行 在新 VPS 启动时创建。新 VPS 将使用预先安装在 CentOS 7 64 位模板上的 cPanel/WHM 面板创建。 Shell 脚本需要更改 VPS 的 IP 地址,并在创建时将新 IP 地址分配给 VPS 并重新启动 cpanel 服务。

#!/bin/bash
echo -e "\e[1;36;40m Modifying parameters in cpanel shared IP configuration \e[0m"
ipchange="$(ip addr show | grep 'venet0:0' | awk '{ print }')"
echo "$ipchange"
sed -i -e 's/"ADDR 127.0.0.1$"/"ADDR $ipchange"/g' /etc/wwwacct.conf
echo -e "\e[1;36;40m Restarting cPanel \e[0m"
systemctl restart cpanel.service  > /dev/null 2>&1
echo -e "\e[1;36;40m Restart cpanel completed \e[0m"

我需要知道如何插入以下命令的部分输出

ip addr show | grep 'venet0:1' | awk '{ print }'

示例输出

bbb.bbb.bbb.bbb/32

只需要复制 bbb.bbb.bbb.bbb 并通过删除现有

插入到 /etc/wwwacct.conf 文件中
ADDR 127.0.0.1

使用新IP

ADDR bbb.bbb.bbb.bbb

保存现有文件并重新启动 cpanel 服务。

对于您的 ip 更改,您可以使用 cut :

ip addr show | grep 'venet0:1' | awk '{ print }' | cut -d'/' -f1

并且您的 sed 应该使用双引号使 shell 扩展 $ipchange 变量:

sed -i -e "s/ADDR 127.0.0.1/ADDR $ipchange/g" /etc/wwwacct.conf