【问题标题】:Sed replacement of ip addresssed替换ip地址
【发布时间】:2015-01-10 22:21:56
【问题描述】:

我正在尝试使用 sed 将一个 IP 地址替换为另一个。任何援助将不胜感激。

test.1 文件中的字符串是:

o=Acc1111 3415 1536 IN IP4 10.201.25.173.

我只想将10.201.25.173. 替换为127.0.0.1.

所需的最终字符串应该是:

o=Acc1111 3415 1536 IN IP4 127.0.0.1.

我的 sed 正则表达式是:

sed 's/o=.*IN IP4.*/*IN IP4 127.0.0.1./' test.1

但这会将所有字符串替换为IN IP4 127.0.0.1.

我需要在一个正则表达式中使用该命令。有可能吗?

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    使用捕获组和反向引用将行首复制到替换中,并将IP替换为127.0.0.1

    sed 's/\(o=.*IN IP4 \).*/\1127.0.0.1./' test.1
    

    \(...\) 创建一个捕获组。在替换中,\1 被替换为与第一个捕获组匹配的输入部分,\2 得到第二个捕获组,依此类推。

    【讨论】:

    • 嗨,Barmar,谢谢。但我找到了一个通用的解决方案。该特定 IP 可以是任何其他 IP。我想覆盖任何给定的 IP
    • 哇,真快! :) 谢谢。你能解释一下语法吗?
    • 我已经添加了解释。但听起来您需要阅读正则表达式教程才能了解捕获组。
    • 非常感谢 Barmar,我会的。
    【解决方案2】:

    更简单的解决方案是使用awk 并替换最后一个字段。

    awk '/IN IP4/ {$NF="127.0.0.1."}1' file
    o=Acc1111 3415 1536 IN IP4 127.0.0.1.
    

    这会将所有行中的 IP 替换为 127.0.0.1.,文本为 IN IP4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-15
      • 2018-02-12
      • 2018-04-23
      • 2011-07-13
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2015-09-25
      相关资源
      最近更新 更多