Using sed with back-references calculated

I would like

pm.max_children = 5

to become;

pm.max_children = 8

and have been working on it and got no soludtions. Backreferences like \1 or \2 don’t seem to be working with calculation.

sed -i -E "s/(pm.max_children)[^=]*=\s*(.+)/\1 = $(echo \2+3)/" /usr/local/etc/php-fpm.d/www.conf 

Using perl commands are OK as well as long as it is solved.

Thank you.

>Solution :

perl -i.bak -wpe's/pm.max_children\s*=\s*\K([0-9]+)/$1 + 3/e' file

This keeps a backup due to .bak; remove that (after testing) if you don’t need a backup.

The \K drops all previous matches so they are not consumed and don’t have to be restored in the replacement part.

Leave a Reply