regex - 优化 sed 字符串

标签 regex linux sed dns

我需要修改/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/

相关文章:

linux - 替换 XML 中的值

regex - 在 test_package 中使用过滤器参数跳过测试

MySQL ERROR 1470 (HY000) 字符串 %s 对于主机名来说太长

Java正则表达式,带有变量的多个表达式

正则表达式从文件中删除密码

python - 如何从一个大文件中随机删除多行?

windows - 使用 Sed 提取完整网站的基本 URL

awk - 如何使用 grep/awk/sed 打印特定模式(不包括模式本身)之前的所有字符?

Java字符串正则表达式替换

python - 如何在正则表达式中包含重音词