我有一个大约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
答案 0 :(得分:1)
如果您使用s{}{}
代替s///
,则无需担心转义正斜杠。
以下在您想要匹配的字符串之前添加注释(如果尚未注释):
perl -i -pe 's{(?<!#)(?=start /opt/nimsoft/bin/niminit "" "start")}{#}' /etc/rc.tcpip
答案 1 :(得分:0)
Perl允许使用除/之外的分隔符。你可以试试〜或{}对。此外,sed可能比Perl脚本更容易使用。