我试图弄清楚如何替换配置文件中的某些文本,即使我并不总是知道全部内容。
例如:
[IP] 192.168.1.0
即使我可能不知道当时的IP值,我也想更改IP值。
我认为SED是解决方法,但这似乎只能在您确切知道要替换的内容的情况下进行替换:
sed -i -e 's/few/asd/g' hello.txt
即使我不知道IP的价值,有没有办法在[IP]
上进行匹配并换行以换一个新的行?
答案 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