【问题标题】:perl + one line change string only if match two words in lineperl + 一行仅在匹配两个单词时才更改字符串
【发布时间】:2010-12-07 21:23:28
【问题描述】:

我在文件中有以下行

    <getTheIP ConnectType='INFO' Host='machine_num_1' VirtualIp='12.34.3.9'/>

我需要将 IP 12.34.3.9 更改为其他 IP,例如 3.4.5.6 但前提是我的第一个单词匹配 ConnectType 和第二个单词匹配 ma​​chine_num_1

请告诉我如何使用 perl 单行命令来做到这一点(我需要从 bash 脚本运行这个 perl 行命令)

【问题讨论】:

    标签: perl


    【解决方案1】:
    >cat test.txt
     <getTheIP ConnectType='INFO' Host='machine_num_1' VirtualIp='12.34.3.9'/>
     <getTheIP ConnectFour='INFO' Host='machine_num_41' VirtualIp='12.34.3.9'/>
     <getTheIP ConnectThree='INFO' Host='machine_num_31' VirtualIp='12.34.3.9'/>
     <getTheIP ConnectType='INFO' Host='machine_num_21' VirtualIp='12.34.3.9'/>
    
    >perl -lpe "if (/ConnectType/ && /'machine_num_1'/) {s/(\d{1,3}\.){3}\d{1,3}/3.4.5.6/};" test.txt
     <getTheIP ConnectType='INFO' Host='machine_num_1' VirtualIp='3.4.5.6'/>
     <getTheIP ConnectFour='INFO' Host='machine_num_41' VirtualIp='12.34.3.9'/>
     <getTheIP ConnectThree='INFO' Host='machine_num_31' VirtualIp='12.34.3.9'/>
     <getTheIP ConnectType='INFO' Host='machine_num_21' VirtualIp='12.34.3.9'/>
    

    【讨论】:

    • 我可以添加“-i”标志来写入文件吗?
    • 您可以使用 perl [...] > myfile 将输出通过管道传输到文件
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2018-05-11
    • 2015-04-08
    • 2023-04-07
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多