首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忙碌箱sed或awk中sed范围替代的替代方法

忙碌箱sed或awk中sed范围替代的替代方法
EN

Stack Overflow用户
提问于 2021-10-20 18:26:08
回答 1查看 349关注 0票数 2

给定以下(部分) olsrd.conf文件,我希望在busybox中使用sed或awk (无论如何可能)设置单个设置。

代码语言:javascript
复制
LoadPlugin "olsrd_httpinfo.so.0.1" {
  # defaults to 1978
  #PlParam "Port"   "8080"
  # if you dont set these, the default is to listen only on the loopback device
  #PlParam "Host"   "80.23.53.22"
  #PlParam "Net"    "10.0.0.0 255.0.0.0"
  #PlParam "Net"     "0.0.0.0 0.0.0.0"
  #PlParam "Host"   "127.0.0.1"
}

LoadPlugin "olsrd_txtinfo.so.1.1" {
  #PlParam "port"   "2006"
  #PlParam  "accept" "0.0.0.0"
}

LoadPlugin "olsrd_jsoninfo.so.1.1" {
  #PlParam "port"   "9090"
  #PlParam  "accept" "0.0.0.0"
}

在通常的Linux发行版中,使用GNU可以很好地工作,下面的例子如下:

代码语言:javascript
复制
MYPORT="1234"
sed -e "/^LoadPlugin.*olsrd_txtinfo.*/ , /}/ s/.*PlParam.*port.*$/PlParam \"port\" \"$MYPORT\"/I" olsrd.conf

但是在busybox (v1.33.1)中,这会导致错误:sed: unsupported command ,

据我所知,busybox不支持范围,因此这条错误消息。

是否有其他方法来实现这一目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 19:11:49

除了删除,操作符周围的空格(这里是剪纸)之外,我还建议对正则表达式做更多的调整:

  • 第一次匹配线检测模式结束时的.*是多余的。
  • -e在这里是多余的
  • 替换命令中最后一个$之后的.*是多余的(.*已经与整行(实际上是字符串)匹配)
  • 如果在sed命令周围使用单引号,则不必担心以后如何转义双引号。只有双引号变量部分,其余部分保持单引号。
  • 另外,如果使用#PlParam捕获行上的初始空格(使用^\([[:space:]]*\)),则可以保留缩进(在替换时使用\1反向引用)。

所以,你可以用

代码语言:javascript
复制
sed '/^LoadPlugin.*olsrd_txtinfo/,/}/ s/^\([[:space:]]*\).*PlParam.*port.*/\1PlParam "port" "'"$MYPORT"'"/I' olsrd.conf

在线演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69651244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档