【发布时间】:2023-01-25 10:50:36
【问题描述】:
这是我们的 yaml:
network:
ethernets:
ens160:
addresses:
- 10.200.2.11/22
gateway4: 10.200.0.1
nameservers:
addresses:
- 8.8.8.8
- 4.4.4.4
search:
- cybertax.live
version: 2
我只想更改 DNS 服务器。 从:
- 8.8.8.8
- 4.4.4.4
到:
- 10.10.10.10
- 10.10.10.11
我怎样才能做到这一点?注意:我们不能使用或安装yq,所以这需要通过 sed 或 awk 来完成。另外,是的,我知道,不推荐这样做,但这是现在需要做的。
到目前为止我尝试了什么:
sed -i '/ addresses:/,/ search:/ s/^/# /' $netplan_yaml
sed -i '/ nameservers:/a\ \ \ \ \ \ \ \ addresses:' $netplan_yaml
for i in ${!asar_dns[@]}; do
sed -i "/ addresses:/a\ \ \ \ \ \ \ \ - ${asar_dns[$i]}" $netplan_yaml
done
但这做错了三件事(我可以看到)。
- 匹配
addresses和search,包括addresses和search。我只想要地址之后和搜索之前的内容。 - 它将 DNS 地址放在旧地址之间的关联数组中,旧地址在任何有“地址”的地方被注释掉。我不想在注释掉的行上这样做。
- 我不喜欢必须使用
\ \ \ \ \ \,如果可能的话我更愿意使用.*,但也需要使用关联数组中的地址。
【问题讨论】:
-
请更新问题以显示您尝试使用
sed和awk,以及您的代码生成的(错误)输出 -
IP地址会一直一样吗?也就是说,您总是想替换
8.8.8.8和4.4.4.4?替换将始终是10.10.10.10和10.10.10.11?或者这些 IP 地址中的任何一个会随时间变化吗? -
源 IP 地址(在本例中为
8.8.8.8和4.4.4.4)是否会出现在 yaml 中不应被替换的其他地方? -
IP 地址可能是任何东西,以及任何数量的 dns 服务器,不能依赖于匹配
8.8.8.8和/或4.4.4.4 -
ed的回答可以接受吗?