我写了一些我认为可以在一堆机器上运行的快速脚本。相反,它会在递归搜索中打印看起来像目录内容的内容:
version=$(mysql Varnish -B --skip-column-names -e "SELECT value FROM sys_param WHERE param='PatchLevel'" | sed -n 's/^.*\([0-9]\.[0-9]*\).*$/\1/p')
if [[ $(echo "if($version == 6.10) { print 1; } else { print 0; }" | bc) -eq 1 ]]; then
status=$(dpkg-query -l | awk '{print $2}' | grep 'sg-status-polling');
cons=$(dpkg-query -l | awk '{print $2}' | grep 'sg-consolidated-poller');
if [[ "$status" != "" && "$cons" != "" ]]; then
echo "about to change /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm"; echo;
cp /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm.bkup;
sed -ir '184s!\x91\x93!\x91\x27--timeout=35\x27\x93!' /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm;
sed -n 183,185p /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm; echo;
else
echo "packages not found. Assumed to be not applicable";
fi
else
echo "This is 4.$version, skipping";
fi
该脚本应该确保Varnish是4.6.10版并且安装了2个自定义.deb软件包(不是通过apt-get)。然后进行备份并在[]
到['--timeout=35']
看起来它在sed上的绊倒取代了一个衬垫。
答案 0 :(得分:1)
有两个主要问题(评论中涉及的小问题)。第一个是您使用[]
的十进制代码而不是六角形,因此您应该使用\x5b\x5d
代替\x91\x93
。第二个问题是,如果你做使用正确的代码,sed
仍将在句法上将其解释为[]
。所以你无法摆脱逃避。这是你应该叫的:
sed -ri'.bkup' '184s!\[\]![\x27--timeout=35\x27]!' /var/www/Varnish/lib/Extra/SG/ObjectPoller2.pm
这将为您创建备份(但您应该仔细检查)。