【问题标题】:Replace multiple IPs in multiple files with sed HP-UX用 sed HP-UX 替换多个文件中的多个 IP
【发布时间】:2013-11-14 02:33:13
【问题描述】:

谁能告诉我如何用 1 个命令批量替换多个文件中的 IP?这个 sed 命令有什么作用?

sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/x.x.x.x/g' *

这里真的需要帮助。谢谢!

【问题讨论】:

    标签: replace sed ip


    【解决方案1】:

    这个 sed 可以:

    s/pattern1/pattern2/g
    

    pattern1 替换为pattern2

    [0-9]\{1,3\} = 1 to 3 来自0-9的数字
    \. 表示单个点.

    所以理论上这应该将所有文件中的所有 IP 更改为给定 IP x.x.x.x
    * 表示此文件夹中的所有文件
    所以没有留下原始IP,所以要小心。

    PS 这不是 100% 工作的。例如此号码3452.343.13.34(不是IP)将更改为3x.x.x.x

    【讨论】:

    • 它实际上似乎不起作用。我确实想替换文件夹中所有文件中的所有 IP。 IP 实际上保持不变,当我为 x.x.x.x 执行 grep 时,我什么也没得到。感谢您的回复!
    • 向我们展示您的意见。使用我的文件,它可以工作,这样也可以:echo "test 10.5.2.20 and another 192.168.12.23" | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/x.x.x.x/g' test x.x.x.x and another x.x.x.x
    • 抱歉回复晚了,正忙于其他事情。反正没有输出。它只是“挂起”。顺便说一句,它可以在 Solaris10 或 11 中运行吗?
    【解决方案2】:
    sed "s/\([12]\{0,1\}[0-9]\{0,1\}[0-9]\.\)\{3\}[12]\{0,1\}[0-9]\{0,1\}[0-9]/x.x.x.x/g"
    

    但是

    1. 如果数字(数字)在之前或之后,则忽略它并将内部部分视为 IP
    2. 如果出现大于 255 且小于 300 的数字,仍被视为 IP
    3. 不包括以 0 开头的 IP(如 120.008.099.234)

    如果这些想法很重要,那么将构建一个更复杂的 sed(我认为是级联的)

    sed "s/.*/#&#/;s/\([^0-9.]\)\([012]\{0,1\}[0-9]\{0,1\}[0-9]\.\)\{3\}[12]\{0,1\}[0-9]\{0,1\}[0-9]\([^0-9.]\)/\1x.x.x.x\3/g;s/^#\(.*\)#$/\1/"
    

    (255 到 300 之间的数字仍然可能)

    【讨论】:

    • 这种比较有道理,但是和之前的方法一样,也行不通。 # sed "s/.*/#/;s/([^0-9.])([012]\{0,1\}[0-9]\{0,1\}[0- 9]\.)\{3\}[12]\{0,1\}[0-9]\{0,1\}[0-9]([^0-9.])/\1x. x.x.x\3/g;s/^#(.*)#$/\1/" /etc/hosts # # Internet 主机表 # ::1 localhost 127.0.0.1 localhost 192.168.130.128 unknown # 由 DHCP 添加顺便说一句我跑了这在 Solaris 10 上。
    • 只需在我们的 aix ont /etc/host 上进行测试即可。所以也许可以设置一个 sed 选项(如 GNU 版本中的 --posix )。我也将“[0-9]\{0,1\}[0-9]”简化为“[0-9]\{1,2\}”(命令中的两次)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2013-06-20
    • 2021-01-05
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多