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

标签 linux shell sed

尽管我并不总是知道完整的内容,但我正在尝试找出如何替换配置文件中的某些文本。

例如:

[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/

相关文章:

python - 在 CentOS 上安装 Pycurl?

python - pyftpdlib make os.makedirs 权限被拒绝

linux - 使用作为 bash 脚本参数传递的 glob 表达式

macos - 如何在 mac 上用 tab 替换多个空格

bash - 比较两个文件的字符串和特定格式所需的输出

bash - 使用 bash/sed 搜索和替换文件中的变量

linux - 当软重启 Linux 内核卡在 "Uncompressing Linux... done, booting the kernel"

linux - 组装 - NASM 析因问题

unix - 在 shell 中进行基本统计的最佳方式?

macos - 如何调用从命令行获取文本输入的 Matlab 函数?