下面是我试图从json文件中获得的输出。有人能帮助获得预期的输出与代码行吗?
注意: JSON文件不能更改,我不想在输出中获得第二个ip地址。shell/bash/awk/sed程序更佳。
JSON :
{"result":[{"description": "Validate application after update for expected operation\nVM Name: fldcldswps7175 \nManaged Instance ID: i-01a2asda390b99 \nIP Address: 10.199.157.67,10.199.157.68","status":true}, {"name":"XML", "good":false}]}
输出: 10.199.157.67
试用代码: IPaddress=('.result'|grep "description"|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|sed 's/,*$//g'|tr -d ',') echo $IPaddress
发布于 2022-07-30 11:44:36
在标记jq时,这里有一个使用jq的解决方案。它在JSON文件中遍历到.result[0].description中的值,选择最后一个[-1]文本行,应用regex,并输出第一个[0]结果。
jq --arg regex '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -r '
.result[0].description | split("\n")[-1] | [scan($regex)][0]
' file.json 10.199.157.67发布于 2022-07-30 11:49:21
在显示的示例和尝试中,请尝试遵循GNU grep命令。由于OP提到了外部工具库不能用于OP的系统,所以在这里使用grep代码,尽管它总是建议使用json感知的工具本身。
grep -oP '^\{"result":\[.*IP Address: \K[^,]*' Input_file解释:使用GNU grep的-oP选项,它将分别打印匹配的数据并启用PCRE regex样式。在使用regex ^\{"result":\[.*IP Address: \K[^,]*的主程序中,它将匹配从启动{"result":到字符串IP Address:的值,然后使用\K选项允许匹配发生,但确保其值被删除,以便只打印\K后面的值。然后使用[^,]*将在第一次出现之前捕获ip地址值。
注意:--它认为您的json只有一行,如注释中提到的那样。
发布于 2022-07-30 19:53:06
您也可以使用capture
.result[0].description | capture("Address: *(?<address>[0-9.]*)").addresshttps://stackoverflow.com/questions/73175227
复制相似问题