如何从两种格式的配置文件提取DATA_DB的变量值
提取配置文件中DATA_DB的多行/单行值
场景说明
现有两种格式的配置文件:
格式1(多行续行)
DATA_DB=foo \ bar \ zoo #may be a comment or not(unreliable content)
格式2(单行)
DATA_DB=foo1
直接执行source foo.cfg会因为值未加引号报错;用普通while循环只能提取部分内容,需要一段通用代码同时适配两种格式,提取格式1的foo、bar、zoo和格式2的foo1。
通用提取脚本
用awk可以轻松处理两种格式,直接运行以下命令:
awk ' # 匹配DATA_DB开头的行,去掉前缀后保存内容 /^DATA_DB=/ { sub(/^DATA_DB=/, ""); content = $0; next } # 处理续行,去掉反斜杠后追加到内容 /\\$/ { sub(/\\$/, ""); content = content " " $0; next } # 非续行直接追加 { content = content " " $0 } # 最后拆分内容输出非空项,同时过滤注释行 END { split(content, items, /[[:space:]]+/) for (i in items) { if (items[i] != "" && items[i] !~ /^#/) print items[i] } } ' foo.cfg
代码说明
- 先捕获
DATA_DB=开头的行,去掉前缀后把值存入content变量 - 遇到行尾带反斜杠的续行,去掉反斜杠后把行内容追加到
content - 普通行直接追加到
content - 最后把
content按空格拆分数组,过滤掉空字符串和注释内容,输出每个有效项
内容的提问来源于stack exchange,提问作者monk
相关产品推荐
相关产品推荐

