【问题标题】:Replacing string in file with perl用perl替换文件中的字符串
【发布时间】:2014-06-11 21:42:18
【问题描述】:

我有一个大约 10 台服务器的列表,我想在所有 10 台服务器中更改一个字符串。

我编写了一个脚本,它查看文件并带有循环,应该使用 perl -i -pe 将行 /opt/nimsoft/bin/niminit "" "start" 更改为 #/opt/nimsoft/bin/niminit "" "start"(添加 # 以注释掉)

oldstring = /opt/nimsoft/bin/niminit "" "start"

newstring = #/opt/nimsoft/bin/niminit "" "start"

我在转义 / 时遇到问题,我尝试了 \ 和 \Q 和 \E。有什么想法吗?

  for i in `cat $file`
  do

    echo "Disable application on startup"

     oldstring=start /opt/nimsoft/bin/niminit "" "start"
     newstring=#start /opt/nimsoft/bin/niminit "" "start"
    ssh -t $i sudo perl -p -i -e 's/oldstring/newstring/g' /etc/rc.tcpip
    #  /etc/rc.tcpip:start /opt/nimsoft/bin/niminit "" "start"
    echo "==============================================="
  done

【问题讨论】:

    标签: regex perl shell


    【解决方案1】:

    如果您使用s{}{} 而不是s///,则不必担心转义正斜杠。

    以下内容在您想要匹配的字符串之前添加一个注释(如果它尚未被注释):

    perl -i -pe 's{(?<!#)(?=start /opt/nimsoft/bin/niminit "" "start")}{#}' /etc/rc.tcpip
    

    【讨论】:

      【解决方案2】:

      Perl 将允许使用 / 以外的分隔符。您可以尝试 ~ 或 { } 对。此外,sed 可能比 Perl 脚本更易于使用。

      【讨论】:

        猜你喜欢
        • 2020-07-23
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 2012-09-21
        • 2013-07-17
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        相关资源
        最近更新 更多