Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用perl替换文件中的字符串_Regex_Perl_Shell - Fatal编程技术网

Regex 用perl替换文件中的字符串

Regex 用perl替换文件中的字符串,regex,perl,shell,Regex,Perl,Shell,我有一个大约10台服务器的列表,我想在所有10台服务器中更改一个字符串 我已经编写了一个脚本,它查看文件并带有一个循环,应该使用perl-I-pe将行/opt/nimsoft/bin/niminit”““start”更改为\opt/nimsoft/bin/niminit”““start”(添加一个注释) 我很难逃离/,我已经尝试了\and \Q和\E。有什么想法吗 for i in `cat $file` do echo "Disable application on star

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

我已经编写了一个脚本,它查看文件并带有一个循环,应该使用
perl-I-pe
将行
/opt/nimsoft/bin/niminit”““start”
更改为
\opt/nimsoft/bin/niminit”““start”
(添加一个注释)

我很难逃离/,我已经尝试了\and \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

如果您使用
s{}{}
而不是
s//
,您就不必担心是否会跳出正斜杠

如果要匹配的字符串尚未注释,则以下内容会在该字符串之前添加注释:

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

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

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