[英]sed replace command working but output is invalid
└─$ sed --version
sed(GNU sed)4.7
文件“主机”:
ip1 == 10.0.0.1
ip2 == 10.0.0.100
执行的命令:
sudo -i sed -i 's/10.0.0.1/10.0.0.200/g' hosts
Output 文件:
ip1 == 10.0.0.200
ip2 == 10.0.0.20000
ip2 中的更改不是预期的并且无效。 这只是 RPA 中的云自动化需要此逻辑的示例逻辑。 ip 的输入是动态变量。
你需要逃避.
并添加条件以避免部分匹配:
$ sed 's/== 10\.0\.0\.1$/== 10.0.0.200/' ip.txt
ip1 == 10.0.0.200
ip2 == 10.0.0.100
$
是行尾锚,如果行尾可以有空格,请使用\s*$
如果==
之后的空格可以变化,则使用==\s*
而不是==
我假设根据给定的样本,每行只能有一个匹配项,因此不使用g
标志
如果ip1
, ip2
等实际上不是输入的一部分,请使用:
$ cat ip.txt
10.0.0.1
10.0.0.100
$ sed 's/^10\.0\.0\.1$/10.0.0.200/' ip.txt
10.0.0.200
10.0.0.100
sudo -i sed -i 's/\b10\.0\.0\.1\b/10.0.0.200/g' hosts
逃离。 (. ->. ) 因为表示正则表达式中的每个字符
\b 将搜索限制在这个确切的位置
你必须改变你的命令如下:
sed -i -e 's:10\.0\.0\.1$:10\.0\.0\.200:g' hosts
这都帮助我解决了它。 IE
$
sudo -i sed -i 's/10.0.0.1\b/10.0.0.200/g' hosts
或者
$
sudo -i sed -i 's/<\10.0.0.1\>/10.0.0.200/g' hosts
欢迎更多回复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.