Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using sed with back-references calculated

Tags:

shell

sed

perl

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.

like image 831
Andrew Kang Avatar asked Dec 18 '25 02:12

Andrew Kang


2 Answers

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 positive lookbehind drops all previous matches so that they are no longer included in the overall match $&, and thus whatever has been matched before it is kept in the string and doesn't have to be restored in the replacement part.

like image 161
zdim Avatar answered Dec 20 '25 17:12

zdim


Using sed

$ sed 's/\(.* \)\(.*\)/echo \1 \$((\2+3))/e' /usr/local/etc/php-fpm.d/www.conf
pm.max_children = 8
like image 32
HatLess Avatar answered Dec 20 '25 17:12

HatLess



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!