shell - 使用 sed 计算反向引用

标签 shell perl 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_children\s*=\s*\K([0-9]+)/$1 + 3/e' file

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

\K positive lookbehind删除所有以前的匹配项,以便它们不再包含在整体匹配项 $& 中,因此之前匹配的任何内容都保留在字符串中,并且不必在替换部分中恢复.

关于shell - 使用 sed 计算反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72107849/

相关文章:

regex - 如何通过 Linux CLI 在文件中搜索模式?

linux - 使用 sed linux 命令

regex - 如何使用 Perl 将以下字符串中的逗号替换为 & ?

Perl 命令或模块,如 Linux "file"命令

Perl:表达式优​​先级和评估

node.js - 为什么我不能通过管道 npm install 到 sed,同时保留颜色和进度更新?

regex - 优化 sed 字符串

php - 将 mySQL 查询作为 cron 作业运行?

c - C语言实现linux下shell的输入输出

linux - 我想提取两个符号之间的任何文本