我想
pm.max_children = 5
成为;
pm.max_children = 8
并一直在研究它,但没有得到解决方案。像\1或\2这样的反向引用似乎不适用于计算。
sed -i -E "s/(pm.max_children)[^=]*=\s*(.+)/\1 = $(echo \2+3)/" /usr/local/etc/php-fpm.d/www.conf
使用perl命令也是可以的,只要它得到解决。
wbrvyc0a1#
perl -i.bak -wpe's/pm.max_children\s*=\s*\K([0-9]+)/$1 + 3/e' file
这将保留一个备份,由于.bak;如果您不需要备份,请在测试后删除它。\K正lookbehind会丢弃所有先前的匹配项,这样它们就不再包含在$&的总匹配项中,因此之前匹配的任何内容都将保留在字符串中,而不必在替换部分中恢复。
.bak
\K
$&
hs1ihplo2#
使用sed
sed
$ sed 's/\(.* \)\(.*\)/echo \1 \$((\2+3))/e' /usr/local/etc/php-fpm.d/www.conf pm.max_children = 8
flvlnr443#
方法有很多,这是其中之一:
perl -lpe 's/(?<= = )(\d)/${1}+3/e' <<< 'pm.max_children = 5'
对于完全匹配:
perl -lpe 's/pm.max_children = \K(\d)/${1}+3/e' <<< 'pm.max_children = 5'
只需匹配末尾的数字:
perl -lpe 's/(\d)$/${1}+3/e' <<< 'pm.max_children = 5'
输出:
对于文件,您可以使用-i就地保存,而不是使用<<<(此处为用于测试的文档)。
-i
<<<
perl -i -lpe '...' <FILE>
3条答案
按热度按时间wbrvyc0a1#
这将保留一个备份,由于
.bak
;如果您不需要备份,请在测试后删除它。\K
正lookbehind会丢弃所有先前的匹配项,这样它们就不再包含在$&
的总匹配项中,因此之前匹配的任何内容都将保留在字符串中,而不必在替换部分中恢复。hs1ihplo2#
使用
sed
flvlnr443#
方法有很多,这是其中之一:
对于完全匹配:
只需匹配末尾的数字:
输出:
对于文件,您可以使用
-i
就地保存,而不是使用<<<
(此处为用于测试的文档)。