如何在busybox sed中检索捕获的组正则表达式

时间:2012-09-13 18:20:29

标签: regex sed busybox

我正在编写一个脚本来启动TS-7400 ARM SBC,我希望它能够读取通过SD卡上的配置文件传递的一些参数和可选内核参数。我调用了我的配置文件syscfg.conf并使用KEYWORD=value对进行组织,但由于内核参数本身可以使用相同的语法,因此我想要分隔这样的值:

CMDLINE_ARGS="elevator=noop scheduler=noop"

在常规bash中进行测试时,我能够使用以下任一方法隔离内核命令行参数:

$ grep CMDLINE_ARGS syscfg.conf | sed 's/CMDLINE_ARGS="\(.*\)"/\1/'
elevator=noop scheduler=noop

$ grep CMDLINE_ARGS syscfg.conf | cut -d'"' -f2
elevator=noop scheduler=noop

$ awk -F'"' '/CMDLINE_ARGS/ {print $2}' syscfg.conf
elevator=noop scheduler=noop

但是当它运行在TS-LINUX上时,这是一个基于busybox的剥离Linux,用于启动自定义内核或应用程序,它不像常规bash那样工作。虽然awk命令甚至不存在,但cut版本工作正常,但sed版本返回此信息:

CMDLINE_ARGS="elevator=noop scheduler=noop"

为什么busybox的sed实现会像这样?我没想要返回整个字符串,而是希望它只输出\1分隔符 - "正则表达式之间的任何字符的“"(.*)"”组。有什么方法可以让它像bash一样工作吗?

1 个答案:

答案 0 :(得分:0)

sed '/CMDLINE_ARGS=/ {s/CMDLINE_ARGS=.//;s/.$//;}' syscfg.conf

如果引用是问题或管道(我怀疑其中一个部分是shell替换),请尝试这个