用perl替换文件中的字符串

时间:2014-06-11 21:42:19

标签: regex perl shell

我有一个大约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

2 个答案:

答案 0 :(得分:1)

如果您使用s{}{}代替s///,则无需担心转义正斜杠。

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

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

答案 1 :(得分:0)

Perl允许使用除/之外的分隔符。你可以试试〜或{}对。此外,sed可能比Perl脚本更容易使用。