Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 优化sed字符串_Regex_Linux_Sed_Dns - Fatal编程技术网

Regex 优化sed字符串

Regex 优化sed字符串,regex,linux,sed,dns,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 我想到的修

在修改之前,我需要使用备份修改/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过程。这将使用regexp模式,但我对此无能为力。

请尝试以下内容(使用GNU
sed测试)

添加
-i.bak
以备份输入_文件并将输出保存到输入_文件本身


我自己刚找到解决办法

sed '-i.orig' -E '/^nameserver.*(11)|(12)$/s/10.77.201/10.200.65/' /etc/resolv.conf
更好的

sed '-i.orig' 's/\<10\>\.77\.201\.1\([12]\)/10.200.65.1\1/' /etc/resolv.conf
sed'-i.orig''s/\\.77\.201\.1\([12]\)/10.200.65.1\1/'/etc/resolv.conf
sed '-i.orig' -E '/^nameserver.*(11)|(12)$/s/10.77.201/10.200.65/' /etc/resolv.conf
sed '-i.orig' 's/\<10\>\.77\.201\.1\([12]\)/10.200.65.1\1/' /etc/resolv.conf