给定以下(部分) olsrd.conf文件,我希望在busybox中使用sed或awk (无论如何可能)设置单个设置。
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可以很好地工作,下面的例子如下:
MYPORT="1234"
sed -e "/^LoadPlugin.*olsrd_txtinfo.*/ , /}/ s/.*PlParam.*port.*$/PlParam \"port\" \"$MYPORT\"/I" olsrd.conf但是在busybox (v1.33.1)中,这会导致错误:sed: unsupported command ,
据我所知,busybox不支持范围,因此这条错误消息。
是否有其他方法来实现这一目标?
发布于 2021-10-20 19:11:49
除了删除,操作符周围的空格(这里是剪纸)之外,我还建议对正则表达式做更多的调整:
.*是多余的。-e在这里是多余的$之后的.*是多余的(.*已经与整行(实际上是字符串)匹配)#PlParam捕获行上的初始空格(使用^\([[:space:]]*\)),则可以保留缩进(在替换时使用\1反向引用)。所以,你可以用
sed '/^LoadPlugin.*olsrd_txtinfo/,/}/ s/^\([[:space:]]*\).*PlParam.*port.*/\1PlParam "port" "'"$MYPORT"'"/I' olsrd.conf见在线演示。
https://stackoverflow.com/questions/69651244
复制相似问题