当前位置: 技术问答>linux和unix
Linux shell中如何读出[ ]里的内容
来源: 互联网 发布时间:2017-05-27
本文导语: { "allApps": [ { "downPath": "http://d.zhidian3g.cn/apk "downloads": 84115421, ...
{
"allApps": [
{
"downPath": "http://d.zhidian3g.cn/apk
"downloads": 84115421,
"packageName": "com.tencent.mobileqq",
"score": 9,
"size": 25494,
"source": 5,
"type": 1,
"version": "4.7.0"
}
],
"errorMsg": "ok",
"packId": 58,
"statusCode": 0,
"version": "d96852bb76144cfeb78ac5df53c055fe"
}
我想把 "allApps":后面的[ ]包含的内容取出来改如何实现。
"allApps": [
{
"downPath": "http://d.zhidian3g.cn/apk
"downloads": 84115421,
"packageName": "com.tencent.mobileqq",
"score": 9,
"size": 25494,
"source": 5,
"type": 1,
"version": "4.7.0"
}
],
"errorMsg": "ok",
"packId": 58,
"statusCode": 0,
"version": "d96852bb76144cfeb78ac5df53c055fe"
}
我想把 "allApps":后面的[ ]包含的内容取出来改如何实现。
|
如果排列格式很乱的话,建议写一个脚本吧,一两句命令还挺难实现的。
说一下我的思路:
1. sed -n ‘/[/,/]/p’ a.txt 找出 [ ] 里面的所有行
2. sed ‘s/apk/apk,/g’ 将所有 "downPath": "http://d.zhidian3g.cn/apk的行都加上逗号结尾,统一格式
3. sed ’2,$s/{//g;2,$s/},/g;2,$s/]//g‘ 将第二行以后的所有'{' "}," ’]‘都删除
4. 然后循环将剩下的 “{ ******,” 这样格式的字符串取出来就行了,里面的******就是要的东西,每取一个追加定位到新文本b.txt ,然后将 “******,”删除掉,直到里面的****为空。
说一下我的思路:
1. sed -n ‘/[/,/]/p’ a.txt 找出 [ ] 里面的所有行
2. sed ‘s/apk/apk,/g’ 将所有 "downPath": "http://d.zhidian3g.cn/apk的行都加上逗号结尾,统一格式
3. sed ’2,$s/{//g;2,$s/},/g;2,$s/]//g‘ 将第二行以后的所有'{' "}," ’]‘都删除
4. 然后循环将剩下的 “{ ******,” 这样格式的字符串取出来就行了,里面的******就是要的东西,每取一个追加定位到新文本b.txt ,然后将 “******,”删除掉,直到里面的****为空。
|
sed -n '/[/{:loop /]/!{N; b loop}; p}' a.txt | sed '/[/d; /]/d'