我正在编写一个脚本来启动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一样工作吗?
答案 0 :(得分:0)
sed '/CMDLINE_ARGS=/ {s/CMDLINE_ARGS=.//;s/.$//;}' syscfg.conf
如果引用是问题或管道(我怀疑其中一个部分是shell替换),请尝试这个