我需要修改/etc/resolv.conf文件并在修改之前进行备份。该文件包含以下字符串:
nameserver 10.99.201.11
nameserver 10.77.201.11
nameserver 10.99.201.10
nameserver 10.77.201.12
期望的结果
nameserver 10.99.201.11
nameserver 10.200.65.11
nameserver 10.99.201.10
nameserver 10.200.65.12
我想到的修改条件:
if some string starts with "nameserver" word
AND
if that string ends on "11" or "12"
THEN
replace 10.77.201 to 10.200.65
这个 sed 命令完美运行
sed '-i.orig' -e '/^nameserver/s/10.77.201.11/10.200.65.11/; /^nameserver/s/10.77.201.12/10.200.65.12/' /etc/resolv.conf
但我需要将其优化为一次 sed 传递。这将与正则表达式模式一起使用,但我对此很弱。
最佳答案
您可以尝试以下操作(已使用 GNU sed
进行测试)。
sed -E '/^nameserver/s/(your_11_one)|(your_12_one)/your_new_value/' Input_file
添加-i.bak
以备份Input_file并将输出保存到Input_file本身。
或者
sed -E '/^nameserver.*(11)|(12)$/s/old_ip/new_ip/' Input_file
关于regex - 优化 sed 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57217592/