gpt4 book ai didi

regex - sed 两次添加替换文本

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:15 26 4
gpt4 key购买 nike

我从未见过 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com