尽管我并不总是知道完整的内容,但我正在尝试找出如何替换配置文件中的某些文本。
例如:
[IP] 192.168.1.0
我想更改 IP 值,尽管我当时可能不知道它是什么。
我认为 SED 是可行的方法,但这似乎只适用于您确切知道要替换什么的替换:
sed -i -e 's/few/asd/g' hello.txt
有什么办法可以匹配 [IP]
并把线路换成新的,即使我不知道 IP 的值是多少?
最佳答案
这是一个例子:
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 位数字 ($
)。
请注意,这个“反斜杠 hell ”是因为该正则表达式符合 POSIX BRE 标准。要摆脱它们,请通过传递 -E
选项来使用 POSIX ERE 正则表达式:
sed -i -E "s/^\[IP] [0-9]{1,3}(\.[0-9]{1,3}){3}$/[IP] $ip/" hello.txt
关于linux - 使用 SED 更新配置文件中特定字符串后的 IP 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430721/