busybox sed不支持范围替换,求olsrd.conf配置修改的sed/awk替代方案
方案1:Busybox Sed 实现
通过标记位标识是否处于目标插件的配置块内,规避不支持的范围匹配语法:
MYPORT="1234" busybox sed -e ' /^LoadPlugin.*olsrd_txtinfo/ { x s/.*/1/ x } /^}/ { x s/.*/0/ x } x /1/ { x s/.*[Pp][Ll][Pp][Aa][Rr][Aa][Mm].*[Pp][Oo][Rr][Tt].*/PlParam "port" "'"$MYPORT"'"/ b } x ' olsrd.conf
需要直接修改原文件的话,在sed参数里加上-i即可。
方案2:Busybox Awk 实现(兼容性更稳定)
语法更清晰,不需要处理复杂的sed转义逻辑,适配性更高:
MYPORT="1234" busybox awk -v port="$MYPORT" ' /^LoadPlugin.*olsrd_txtinfo/ { in_block=1 } /^}/ { if (in_block) in_block=0 } in_block && tolower($0) ~ /plparam.*port/ { print " PlParam \"port\" \"" port "\"" next } 1 ' olsrd.conf > olsrd.conf.tmp && mv olsrd.conf.tmp olsrd.conf
自定义修改适配方法
- 要修改其他插件参数:把正则匹配规则里的
olsrd_txtinfo替换为对应插件名即可,比如olsrd_jsoninfo - 要修改其他配置项:把正则里的
port替换为对应参数名即可,比如accept
内容的提问来源于stack exchange,提问作者Christoph
相关产品推荐
相关产品推荐

