使用SED命令检索JSON对象键值

使用SED命令检索JSON对象键值,json,ubuntu,sed,Json,Ubuntu,Sed,我有一个类似下面的JSON来自curl命令,它存在于output.txt文件中。我想检索JIRA的状态,这里是“正在进行” 我只能使用sed。我试着像下面一样,它不工作。我不确定如何导航到名称值。你能建议打印JIRA状态吗 sed -n 's|.*"fields":{"status":{"name":"\([^"]*\)".*|\1|p' output.txt 你可以用 sed-n的/^[:space:

我有一个类似下面的JSON来自curl命令,它存在于output.txt文件中。我想检索JIRA的状态,这里是“正在进行”

我只能使用sed。我试着像下面一样,它不工作。我不确定如何导航到名称值。你能建议打印JIRA状态吗

sed -n 's|.*"fields":{"status":{"name":"\([^"]*\)".*|\1|p'  output.txt
你可以用

sed-n的/^[:space:][]*“name”:“\(.*)”,/\1/p'output.txt
#使用GNU时:
sed-n的/^\s*“name”:\s*“\(.*\)”,/\1/p'output.txt

详情:

  • n
    -抑制默认行输出
  • ^\s*“名称”:\s*“\(.*)”,
    -匹配
    • ^
      -字符串的开头
    • \s*
      -零个或多个空格
    • “名称”:
      -文字字符串
    • \s*
      -零个或多个空格
    • -a
      字符
    • \(.*)
      -一个POSIX BRE捕获组,匹配到
    • -最后出现的
      (它们仍然位于目标行的末尾)
  • \1
    -将整个匹配项替换为组1值
  • p
    -仅打印更换结果
使用GNU
sed
,您还可以使用
-z
选项将文件作为单个字符串读取,然后使用更具体的模式:

sed-z的/*“字段”:\s*{\s*“状态”:{.*\s*名称:“\([^”]*\)”*/\1/'output.txt


很遗憾,docker映像无法与jq一起使用。我现在无法更改docker,它只能与sedHow about
sed-nE'/“name”:/s/*“(.+)”*/\1/p'
awk-F'/“name”:/{print$4}一起使用“
假设搜索
“name”时只有一行匹配:
尝试
sed-n的/^[:space:][]*“name”:“\(.*\)”,/\1/p”文件
,请参见。是否确实需要检查
字段:{“status”
是否存在?@WiktorStribiżew-不是真的
sed -n 's|.*"fields":{"status":{"name":"\([^"]*\)".*|\1|p'  output.txt