我从未见过 sed 有这样的行为,但我正在尝试用我自己的 3 个条目(包括“名称服务器”)替换/etc/resolv.conf 中的所有“名称服务器”实例。我尝试过的每个组合都会将我的 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
所以,正确的顺序和条目,但添加了两次。我也尝试将其缩小到名称服务器和 ip,但仍然打印两次相同的输出。
sed -i "s/^nameserver [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1 ,3\}\.[0-9]\{1,3\}/名称服务器 10.1.1.1\n名称服务器 10.1.1.2\n名称服务器 10.1.1.3/g"
我在这里真的很困惑,似乎无法通过这个。任何帮助表示赞赏。
预计到达时间: 当前resolv.conf
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
最佳答案
您在原始文件中出现了两次“名称服务器”,因此 sed
替换了它们中的每一个。
你可以做到 multiline replacements使用 sed
,但更简单的做法是删除不需要的行,然后附加需要的行。虽然我不熟悉 /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
关于regex - sed 两次添加替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58366257/