2

我正在编写一个脚本来启动 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 中一样工作吗?""(.*)"

4

1 回答 1

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

如果报价有问题或管道有问题,可以试试这个(我怀疑其中一个部分有外壳替换)

于 2013-11-03T21:02:42.227 回答