使用jq将.env文件转为JSON时的空行与注释处理问题
解决.env转JSON时jq处理空行和注释的问题
要解决jq处理.env文件时的空行报错、注释行被错误转换的问题,只需先通过文本过滤工具预处理文件,再用jq转换即可。
完整命令(推荐用gawk)
gawk '!/^[[:space:]]*#/ && NF' .env | jq -R 'split("=") | {key: .[0], value: .[1]} | select(.key != "") | from_entries'
命令拆解
预处理阶段(gawk部分):
!/^[[:space:]]*#/:过滤掉所有以任意空格开头后接#的注释行(包括直接以#开头的行)NF:过滤掉空行(包括仅含空格的行)- 最终只保留有效键值对行
jq转换阶段:
-R:将每行作为原始字符串读取,而非JSON格式split("="):把每行按=分割为键、值数组{key: .[0], value: .[1]}:将数组转为标准键值对对象select(.key != ""):排除分割后无有效键的异常行from_entries:将键值对对象数组合并为最终的JSON对象
替代方案(用grep)
如果系统没有gawk,可改用grep组合:
grep -v '^[[:space:]]*#' .env | grep -v '^[[:space:]]*$' | jq -R 'split("=") | {key: .[0], value: .[1]} | select(.key != "") | from_entries'
grep -v '^[[:space:]]*#':移除注释行grep -v '^[[:space:]]*$':移除空行及全空格行
测试示例
假设.env文件内容如下:
# 系统配置 os=amazon-linux region=ap-south-1 # 可用区设置 zone=ap-south-1a
运行命令后输出:
{ "os": "amazon-linux", "region": "ap-south-1", "zone": "ap-south-1a" }
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

