【问题标题】:Updating IP values after a specific string in a configuration file using SED [duplicate]使用 SED 在配置文件中的特定字符串之后更新 IP 值 [重复]
【发布时间】:2019-06-03 15:51:51
【问题描述】:

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

例如:

[IP] 192.168.1.0

我想更改 IP 值,即使我当时可能不知道它可能是什么。

我认为 SED 是可行的方法,但这似乎只处理您确切知道要替换什么的替换:

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

有没有办法可以匹配[IP] 并换行换新的,即使我不知道 IP 的值是多少?

【问题讨论】:

标签: linux shell sed


【解决方案1】:

这是一个例子:

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 位数字直到行尾 ($)。

请注意,这个“反斜杠地狱”是由于这个正则表达式符合 POSIX BRE 的事实。要摆脱它们,请通过 -E 选项使用 POSIX ERE 正则表达式:

sed -i -E "s/^\[IP] [0-9]{1,3}(\.[0-9]{1,3}){3}$/[IP] $ip/" hello.txt

【讨论】:

猜你喜欢
  • 2017-02-21
  • 2016-09-09
  • 2012-05-29
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多