使用SED在配置文件中的特定字符串之后更新IP值

时间:2019-06-03 15:51:51

标签: linux shell sed

我试图弄清楚如何替换配置文件中的某些文本,即使我并不总是知道全部内容。

例如:

[IP] 192.168.1.0

即使我可能不知道当时的IP值,我也想更改IP值。

我认为SED是解决方法,但这似乎只能在您确切知道要替换的内容的情况下进行替换:

 sed -i -e 's/few/asd/g' hello.txt

即使我不知道IP的价值,有没有办法在[IP]上进行匹配并换行以换一个新的行?

1 个答案:

答案 0 :(得分:0)

这里是一个例子:

s="[IP] 192.168.1.0"
ip="192.168.15.24"
sed -i "s/^\[IP] .*/[IP] $ip/" hello.txt

请参见online demo

在这里,^\[IP] .*个匹配项

  • ^-一行的开头
  • \[IP]-一个[IP]子字符串
  • -一个空格
  • .*-任何0个或更多字符。

如果要使用更具体的匹配模式,请考虑将^\[IP] .*更改为

^\[IP] [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$

^\[IP] [0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}$

在这里,[0-9]\{1,3\}匹配1、2或3位数字,\(\.[0-9]\{1,3\}\)\{3\}匹配3个重复的.和1、2或3位数字,直到行尾({{ 1}})。

请注意,此“反斜杠地狱”是由于此正则表达式符合POSIX BRE。要摆脱它们,请通过传递$选项使用POSIX ERE正则表达式:

-E