使用以下1行创建文件(x):
{"dagId":"blashj","execDate":"20190426","status":"running","isActive":true}
->返回所需值---> true
cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\isActive/ {print $0}'
->为什么这不返回值?期望值--->运行中
cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\status/ {print $0}'
env是RHEL7.4,GNU Awk 4.0.2
答案 0 :(得分:3)
那是因为\s
不匹配吗?
答案 1 :(得分:1)
我将全力支持jq
,该版本应可在您的平台上使用:
jq -r '"isActive:"+(.isActive | tostring)' file
如果只需要该对象属性的值,则它可以很简单
jq -r '.status' file
-r
或--raw-output
将字符串直接写入标准输出,而不是将其格式化为带引号的JSON字符串
参见jq is sed for json。使用正确的工具可以节省时间。
答案 2 :(得分:1)
如果像我一样,您在工作中无权访问jq
,我将使用正则表达式作为awk
记录分隔符。
$ awk -F: -v RS='[{},]' '/"isActive"/{print $2}' x
true
$ awk -F: -v RS='[{},]' '/"status"/{print $2}' x
"running"