You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell工具或jq从指定JSON中提取首个IP地址?

提取JSON中描述字段的第一个IP地址

需求:从固定JSON文件中提取description字段里的第一个IP地址(排除第二个),期望输出为10.199.157.67。

目标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}]}

尝试过的代码(未成功):

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

推荐方案:使用jq处理(最可靠)

jq是专门处理JSON的工具,能精准定位字段,避免正则处理JSON的风险:

jq -r '.result[0].description | split("\n")[] | select(startswith("IP Address: ")) | ltrimstr("IP Address: ") | split(",")[0]' input.json

逻辑说明:

  • .result[0].description:定位到第一个result对象的description字段
  • split("\n")[]:按换行拆分描述内容,遍历每一行
  • select(startswith("IP Address: ")):筛选出IP地址所在行
  • ltrimstr("IP Address: "):去掉行首的前缀文本
  • split(",")[0]:按逗号拆分IP列表,取第一个元素

如果直接使用JSON字符串而非文件,可执行:

echo '{"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}]}' | jq -r '.result[0].description | split("\n")[] | select(startswith("IP Address: ")) | ltrimstr("IP Address: ") | split(",")[0]'

备选方案:使用grep+head(无jq环境适用)

如果系统未安装jq,可结合grep提取所有IP后取第一个:

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' input.json | head -n1

逻辑说明:

  • grep -o:仅输出匹配到的IP字符串
  • head -n1:提取第一行结果(即第一个IP)

若要精准匹配description字段中的IP(避免其他字段可能出现的IP),可执行:

grep -A1 '"description"' input.json | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -n1

内容的提问来源于stack exchange,提问作者Sayantan Jana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:48:28