如何在Alpine容器中用sed/grep/awk提取JSON的theSecret值(无jq/perl)
提取JSON中
theSecret值的可行方法 由于sed默认采用贪婪匹配,导致之前的命令匹配范围过大,以下是仅用sed、grep、awk在Alpine容器中正确提取值的方法:
方法1:使用sed
将正则中的.*替换为[^"]*(匹配所有非双引号的字符),避免贪婪匹配:
echo "$json" | sed -nE 's/.*"theSecret":"([^"]*)".*/\1/p'
解释:[^"]*只会匹配到下一个双引号为止,刚好截取theSecret对应的值。
方法2:使用grep
方式A(支持Perl正则的grep)
如果Alpine的grep支持-P参数(部分busybox版本已支持),可以用\K忽略前面的匹配内容,直接输出目标值:
echo "$json" | grep -oP '"theSecret":"\K[^"]*'
方式B(基础grep+cut)
如果不支持-P,先匹配完整的键值对,再用cut分割提取:
echo "$json" | grep -o '"theSecret":"[^"]*"' | cut -d'"' -f4
方法3:使用awk
利用双引号作为分隔符,遍历字段找到theSecret后,取其后第二个字段(对应值的位置):
echo "$json" | awk -F'"' '{for(i=1;i<=NF;i++) if($i=="theSecret") print $(i+2)}'
或者更简洁的写法:
echo "$json" | awk '/"theSecret":"/{split($0,a,"\""); print a[4]}'
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

