Linux shell中如何读出[ ]里的内容

pengyizhao3 2014-08-27 03:27:25
{
"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":后面的[ ]包含的内容取出来改如何实现。
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔跑的路 2014-08-28
  • 打赏
  • 举报
回复
刚刚想了一下,如果先把[***]里面的所有逗号和左大括号“{“ ,右大括号且逗号 ”},“ 替换成换行符 ”\n“,应该就可以按照1楼的方法实现了
糊涂的小白 2014-08-28
  • 打赏
  • 举报
回复
这种时候吧,我觉得直接写个C程序吧。
奔跑的路 2014-08-28
  • 打赏
  • 举报
回复
如果排列格式很乱的话,建议写一个脚本吧,一两句命令还挺难实现的。 说一下我的思路: 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 ,然后将 “******,”删除掉,直到里面的****为空。
pengyizhao3 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 Windeal 的回复:
引用 3 楼 pengyizhao3 的回复:
[quote=引用 1 楼 Windeal 的回复:] sed -n '/\[/{:loop /\]/!{N; b loop}; p}' a.txt | sed '/\[/d; /\]/d'
就是运行了这条之后只能取一部分,有些数据取不到
额?哪些数据取不到?后半部分还是?是不是数据非常多超过了模式空间[/quote] 要读取文件的大小至少是40K
轮子学长 2014-08-27
  • 打赏
  • 举报
回复
引用 3 楼 pengyizhao3 的回复:
引用 1 楼 Windeal 的回复:
sed -n '/\[/{:loop /\]/!{N; b loop}; p}' a.txt | sed '/\[/d; /\]/d'
就是运行了这条之后只能取一部分,有些数据取不到
额?哪些数据取不到?后半部分还是?是不是数据非常多超过了模式空间
pengyizhao3 2014-08-27
  • 打赏
  • 举报
回复
引用 1 楼 Windeal 的回复:
sed -n '/\[/{:loop /\]/!{N; b loop}; p}' a.txt | sed '/\[/d; /\]/d'
就是运行了这条之后只能取一部分,有些数据取不到
pengyizhao3 2014-08-27
  • 打赏
  • 举报
回复
引用 1 楼 Windeal 的回复:
sed -n '/\[/{:loop /\]/!{N; b loop}; p}' a.txt | sed '/\[/d; /\]/d'
能取一部分我的[ ]里面有很多个{ }例如 { "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" }, { "downPath": "http://d.zhidian3g.cn/apk "downloads": 84115421, "packageName": "com.tencent.mobileqq", "score": 9, "size": 25494, "source": 5, "type": 1, "version": "4.7.0" }, { "downPath": "http://d.zhidian3g.cn/apk "downloads": 84115421, "packageName": "com.tencent.mobileqq", "score": 9, "size": 25494, "source": 5, "type": 1, "version": "4.7.0" }, { "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" } 在文件444.txt文件,而且格式不是这样来排列的是一般的文本格式。
轮子学长 2014-08-27
  • 打赏
  • 举报
回复
sed -n '/\[/{:loop /\]/!{N; b loop}; p}' a.txt | sed '/\[/d; /\]/d'

23,218

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧