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

如何用Sed提取struct_hospital中所有geo字段的值?

使用Sed提取JSON中指定字段的值(处理不固定格式文本)

嘿,我来帮你搞定这个Sed提取的问题!针对你这种格式不固定(可能带制表符、所有内容挤在同一行)的JSON片段,要提取struct_hospital里所有geo字段的值(包括空值),这里有两个实用的Sed方案:

方案一:通用匹配(适用于大多数场景)

这个命令能适配geo字段周围的各种空白格式(空格、制表符都没问题),精准提取引号内的内容,连空值也不会漏掉:

sed -n 's/.*"geo"\s*:\s*"\([^"]*\)".*/\1/p' your_file.txt

简单拆解下命令逻辑:

  • -n:让Sed只输出我们匹配到的内容,避免打印整个文件
  • s/.*"geo"\s*:\s*"\([^"]*\)".*/\1/p:
    • .*"geo"\s*:\s*":匹配任意字符直到找到"geo",接着匹配冒号前后的任意空白(空格/制表符),最后定位到字段值的开头引号
    • \([^"]*\):把引号之间的所有内容(包括空值,因为[^"]*允许零个字符)捕获下来
    • \1:把整行内容替换成我们捕获到的geo值
    • p:打印替换后的结果

方案二:精准限定在struct_hospital区块内

如果你的文件里其他地方也有geo字段(比如data_personnel区块万一也出现),可以先锁定struct_hospital的范围再提取,避免误抓:

sed -n '/"struct_hospital":/,/]/ { s/.*"geo"\s*:\s*"\([^"]*\)".*/\1/p }' your_file.txt

额外逻辑说明:

  • /\"struct_hospital\":/,/]/:告诉Sed只处理从"struct_hospital":开始,到第一个]结束的内容块,完全限定了提取范围
  • 后面的替换逻辑和方案一一致,确保只提取目标区块里的geo值

测试效果

用你提供的示例内容测试,不管是整行排版还是带制表符,这两个命令都会输出如下结果(空值会显示为空白行):

chamb
jsj

marqui
oliwo
par

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:47