使用grep解析json文件中的密钥并获取值

使用grep解析json文件中的密钥并获取值,json,bash,awk,sed,Json,Bash,Awk,Sed,有人可以建议我如何在解析示例json文本后获得值45,如下所示: .... "test": 12 "job": 45 "task": 11 ..... 请注意,我知道像jq和其他工具,但这需要安装它 我希望使用grep、awk或sed命令执行此操作。您可以使用grep-oP(PCRE): \K用于重置先前匹配的数据。您可以使用grep-oP(PCRE): \K用于重置先前匹配的数据。使用awk,如果您只想打印它: awk -F ':[ \t]*' '/^.*"job"/ {print $2}'

有人可以建议我如何在解析示例json文本后获得值45,如下所示:

....
"test": 12
"job": 45
"task": 11
.....
请注意,我知道像jq和其他工具,但这需要安装它


我希望使用grep、awk或sed命令执行此操作。

您可以使用
grep-oP
(PCRE):


\K
用于重置先前匹配的数据。

您可以使用
grep-oP
(PCRE):


\K
用于重置先前匹配的数据。

使用
awk
,如果您只想打印它:

awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename
上面的命令匹配在行首有
“job”
的任何行,然后打印该行的
第二列。awk选项
-F
用于将列分隔符设置为
,后跟任意数量的
空格
选项卡

如果要将此值存储在bash变量
job\u val
中:

job_val=$(awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename)

使用
awk
,如果您只想打印它:

awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename
上面的命令匹配在行首有
“job”
的任何行,然后打印该行的
第二列。awk选项
-F
用于将列分隔符设置为
,后跟任意数量的
空格
选项卡

如果要将此值存储在bash变量
job\u val
中:

job_val=$(awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename)

为任务使用专门的工具,如
jq

你的
文件
看起来像

[
{
"test": 12,
"job": 45,
"task": 11
}
]
{
"stuff" :{
.
.
"test": 12,
"job": 45,
"task": 11
.
.
}
}
下面的东西可以让你回家

jq ".[].job" file
你的
文件
看起来像

[
{
"test": 12,
"job": 45,
"task": 11
}
]
{
"stuff" :{
.
.
"test": 12,
"job": 45,
"task": 11
.
.
}
}
下面


将带您回家。

使用专门的工具,如
jq
完成任务:

你的
文件
看起来像

[
{
"test": 12,
"job": 45,
"task": 11
}
]
{
"stuff" :{
.
.
"test": 12,
"job": 45,
"task": 11
.
.
}
}
下面的东西可以让你回家

jq ".[].job" file
你的
文件
看起来像

[
{
"test": 12,
"job": 45,
"task": 11
}
]
{
"stuff" :{
.
.
"test": 12,
"job": 45,
"task": 11
.
.
}
}
下面


安装
jq
并不难:它是一个二进制文件(没有外部依赖项),可以复制到任何目录中。为什么不使用像
jq
这样的专用工具来完成这项工作,
jq
sed
for
json
对我来说也不是有效的json:/is Python,安装在服务器上的PHP或Perl?安装
jq
并不难:它是一个可以复制到任何目录中的单一二进制文件(没有外部依赖项)。为什么不使用像
jq
这样的专用工具来完成这项工作呢,
jq
sed
for
json
对我来说也不是有效的json:/Python、PHP或Perl安装在服务器上吗?json文件中的键不太可能从行的开头开始。虽然使用grep/sed/awk确实可以完成一项简单的任务,但我强烈推荐
jq
。安装它并不难——就像OP已经声明的那样,他不能/不会安装
jq
,并要求使用标准的UNIX工具来解决问题。我使用很多没有安装任何工具许可的机器,也许OP也是如此,idk。我还使用了很多机器,我必须快速地跳上去做一些事情,因此我也倾向于避免使用非标准工具的解决方案。我将在前面添加一些可选的空白,以防OPs real输入与他发布的输入格式不符。当然,对于一个简短的交互式黑客来说,这可能已经足够好了。但是对于一个脚本或程序来说不是。如果OP不能使用
jq
,他可以使用PHP、Python、Perl等脚本语言。几乎可以肯定安装了能够处理json的东西。如果安装了jq,那么他可能有php、pyhon、perl、,但如果不是,那么就没有理由认为其他非标准工具是,如果OP不能安装jq,那么他几乎肯定不能安装任何其他工具。json文件中的密钥不太可能从行的开头开始。虽然使用grep/sed/awk确实可以完成一项简单的任务,但我强烈推荐
jq
。安装它并不难——就像OP已经声明的那样,他不能/不会安装
jq
,并要求使用标准的UNIX工具来解决问题。我使用很多没有安装任何工具许可的机器,也许OP也是如此,idk。我还使用了很多机器,我必须快速地跳上去做一些事情,因此我也倾向于避免使用非标准工具的解决方案。我将在前面添加一些可选的空白,以防OPs real输入与他发布的输入格式不符。当然,对于一个简短的交互式黑客来说,这可能已经足够好了。但是对于一个脚本或程序来说不是。如果OP不能使用
jq
,他可以使用PHP、Python、Perl等脚本语言。可以处理json的东西几乎肯定安装了。如果安装了jq,那么他可能会有php、pyhon、perl等。但是如果不是,那么就没有理由认为其他任何非标准工具是,如果OP不能安装jq,那么他几乎肯定不能安装任何其他工具。