sed replace 命令有效但输出无效
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
输出文件:
ip1 == 10.0.0.200
ip2 == 10.0.0.20000
The change in ip2 is not expected and an invalid.
This is just a sample logic need this logic for a Cloud Automation in RPA.
The Inputs of ip are dynamic vars.
您需要转义 .
并添加条件以避免部分匹配:
$ 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
您必须如下更改命令:
sed -i -e 's:10\.0\.0\.1$:10\.0\.0\.200:g' hosts
sudo -i sed -i 's/\b10\.0\.0\.1\b/10.0.0.200/g' hosts
逃避 . ( . -> . ) 因为表示正则表达式中的每个字符
\b 将搜索限制在这个确切的范围内
这两个都帮我解决了。
即
$
sudo -i sed -i 's/10.0.0.1\b/10.0.0.200/g' hosts
or
$
sudo -i sed -i 's/<.0.0.1\>/10.0.0.200/g' hosts
欢迎更多回复。
└─$ 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
输出文件:
ip1 == 10.0.0.200
ip2 == 10.0.0.20000
The change in ip2 is not expected and an invalid. This is just a sample logic need this logic for a Cloud Automation in RPA. The Inputs of ip are dynamic vars.
您需要转义 .
并添加条件以避免部分匹配:
$ 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
您必须如下更改命令:
sed -i -e 's:10\.0\.0\.1$:10\.0\.0\.200:g' hosts
sudo -i sed -i 's/\b10\.0\.0\.1\b/10.0.0.200/g' hosts
逃避 . ( . -> . ) 因为表示正则表达式中的每个字符
\b 将搜索限制在这个确切的范围内
这两个都帮我解决了。 即
$
sudo -i sed -i 's/10.0.0.1\b/10.0.0.200/g' hosts
or
$
sudo -i sed -i 's/<.0.0.1\>/10.0.0.200/g' hosts
欢迎更多回复。