用于解析的Sed
我有档案:用于解析的Sed,sed,Sed,我有档案: "data_personnel": [ { "id": "1", "name": "Mathieu" } ], "struct_hospital": [ { "id": "9", "geo": "chamb", "nb": "" }, { "id": "", "geo": "jsj", "nb": "SMITH"
"data_personnel": [
{
"id": "1",
"name": "Mathieu"
}
],
"struct_hospital": [
{
"id": "9",
"geo": "chamb",
"nb": ""
},
{
"id": "",
"geo": "jsj",
"nb": "SMITH"
},
{
"id": "10",
"geo": "",
"nb": "12"
},
{
"id": "2",
"geo": "marqui",
"nb": "20"
},
{
"id": "4",
"geo": "oliwo",
"nb": "1"
},
{
"id": "1",
"geo": "par",
"nb": "5"
}
]
如何使用sed获取所有值geo在struct_医院的作用?(chamb、jsj、marqui、oliwo等)
该文件可以是任何形式。如Sundeep所指出的那样,对于选项卡、一行中的所有内容等,使用合适的JSON解析器更有意义。 但是,如果您正在寻找一次性快速、肮脏的解决方案,那么这可能会:
sed -n '/^"struct_hospital"/,/^]/s/^.*"geo"\s*:\s*"\([^"]*\)"\s*,\?.*$/\1/p' input.txt
样本输出:
chamb
jsj
marqui
oliwo
par
说明:
搜索并替换;仅打印每个匹配行的第一个捕获子模式s/../\1/p
匹配^.*“geo”\s*:\s*“\(.*\)”\s*,\?.*$
行;捕获冒号后面的值geo
sed
调用作为预处理器来插入换行符:
sed 's/]\|,/\n&/g'
这将生成完整的命令:
sed 's/]\|,/\n&/g' input.txt | sed -n '/^"struct_hospital"/,/^]/s/^.*"geo"\s*:\s*"\([^"]*\)"\s*,\?.*$/\1/p'
如果这是json,不要使用sed。。使用类似于
jq
。。。另外,添加您试图质疑的代码。文件可以是任何形式。使用制表符、一行中的所有内容等..
@Kent我误读了问题,错误地认为OP意味着所需的输出可以是任何格式。我编辑了我的答案;谢谢你指出这一点。我使用这个注释sed-n/“struct\u hospital\”/,/^\],$/s/^[:blank:]*\“geo\:[[:blank:]\+\([^\“]*\”,/\1/p我的\u文件
,但如果我想获得nb的所有价值,它是行不通的。。。