【问题标题】:About sed command关于 sed 命令
【发布时间】:2019-12-13 17:10:17
【问题描述】:

我正在努力处理 sed 命令。

我想将文件中的 IP 地址更改为 10.2.22.222:8000

文件包含这个。

Uri = 10.1.11.111:8000

我相信下面的代码是好的。

sed -e "s/[0-9]{1-3}.[0-9]{1-3}.[0-9]{1-3}.[0-9]{1-3}:[0-9]{1-4}/10.2.22.222:8000/"

但是,即使我相信我的正则表达式是正确的,它也不能正常工作。

我该怎么办?

【问题讨论】:

  • 您的正则表达式不正确,范围量词语法为{min,max}sed -E "s/[0-9]{1,3}(\.[0-9]{1,3}){3}:[0-9]{1,4}/10.2.22.222:8000/",见the demo
  • 我必须使用 "-i" 选项。
  • 如果您需要将结果保存在同一个文件中,可以。 sed 版本之间的情况并不完全相同,因此在大多数情况下,我将其留给 OP 来解决。或通过评论。反正就是solved issue

标签: sed


【解决方案1】:

您的正则表达式不正确,范围量词语法是 {min,max},而不是 {min-max}。此外,-e 选项在这里没有多大帮助,因为您的模式符合 POSIX ERE(因为{x,y} 量词大括号没有转义)。

使用

sed -E 's/[0-9]{1,3}(\.[0-9]{1,3}){3}:[0-9]{1,4}/10.2.22.222:8000/'

或 POSIX BRE:

sed 's/[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}:[0-9]\{1,4\}/10.2.22.222:8000/'

请参阅online sed demo

【讨论】:

  • 非常感谢。我必须逃跑。
猜你喜欢
  • 2021-06-17
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多