如何用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
相关产品推荐
相关产品推荐

