使用sed计算反向引用



我想

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命令是可以的。

谢谢。

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

这保留了由于.bak的备份;如果您不需要备份,请删除(测试后)。

K的正面后看删除所有以前的匹配,使它们不再包括在$&的整体匹配中,因此任何之前匹配的内容都保留在字符串中,而不必在替换部分中恢复。

使用sed

$ sed 's/(.* )(.*)/echo 1 $((2+3))/e' /usr/local/etc/php-fpm.d/www.conf
pm.max_children = 8

有很多方法,这是其中之一:

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'

输出:

pm.max_children = 8

对于文件,您可以使用-i就地保存,而不是<<<(这里的文档用于测试)使用文件。

perl -i -lpe '...' <FILE>

相关内容

  • 没有找到相关文章

最新更新