我从未见过sed这样做,但我正试图用自己的3个条目替换/etc/resolv.conf中的所有“nameserver”实例,包括“nameserver”。我尝试过的每一个组合都会添加我的3个条目两次,所以我有6个条目。
sed -i 's/.*nameserver.*/nameserver 10.1.1.1\nnameserver 10.1.1.2\nnameserver 10.1.1.3/g' /etc/resolv.conf
哪些输出

nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3

所以,正确的顺序和条目,但是添加两次。我也试过将其缩小到nameserver和ip,但仍然会打印两次相同的输出。
sed -i "s/^nameserver [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/nameserver 10.1.1.1\nnameserver 10.1.1.2\nnameserver 10.1.1.3/g"
我在这里真的很困惑,似乎过不了这一关。感谢任何帮助。
预计到达时间:
当前分辨率配置
search domain1.net. domain2.net. domaine.com.
nameserver 192.168.1.1
nameserver 192.168.1.2

期望输出
search domain1.net. domain2.net. domaine.com.
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3

最佳答案

在原始文件中有两个“nameserver”,因此sed将替换它们中的每一个。
您可以使用sed来执行multiline replacements操作,但是删除不需要的行,然后附加需要的行会更简单。虽然我不熟悉/etc/resolv.conf所以我不知道订单是否重要。

sed '/nameserver.*/d' /etc/resolv.conf
cat <<'EOF'
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
EOF

如果从中得到的输出看起来不错,请运行以下命令进行实际更改:
sudo sed -i '/nameserver.*/d' /etc/resolv.conf
sudo tee -a /etc/resolv.conf >/dev/null <<'EOF'
nameserver 10.1.1.1
nameserver 10.1.1.2
nameserver 10.1.1.3
EOF

08-05 14:16