免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2880 | 回复: 10
打印 上一主题 下一主题

[其他] sed命令的一个问题 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-26 19:19 |只看该作者 |倒序浏览
首先看一下命令:sed 's/.*"data":"\(.*\)",.*/\1/g' 文件
文件内容大致如下:{"filename":"/local/iso/hello.txt","filesize":"104857600","data":"aaaaaaaaa==","offset":"0"}
命令的目的就是取出data相应字段的值,也就是aaaaaaaaa==
上面这些是不会有问题的,但是如果data相应的字段很长,长到有100M左右的时候,上个命令显示的结果就是全部都显示出来了,而不是data的字段内容。
在这求助大家,希望大家不吝赐教,谢谢大家了!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2015-02-26 19:32 |只看该作者
回复 1# zhiwen1002

How about those

$ perl -lane '{print $1 if(m/"data":"(.+?)"/)}' FILE
aaaaaaaaa==

$ grep -oP '(?<="data":")[^"]+' FILE
aaaaaaaaa==

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
3 [报告]
发表于 2015-02-26 19:57 |只看该作者
回复 2# jason680

非常感谢你的解答,试了grep是可以的解决问题的,再次感谢。
问题解决了但是还是想知道根源,就是为什么我上面的sed不行,100M的文件也不是很大啊。


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-02-26 20:32 |只看该作者
回复 3# zhiwen1002

$ echo '{"filename":"/local/iso/hello.txt","data":"aaaaaaaaa==","offset":"0","filesize":"104857600"}' | sed 's/.*"data":"\(.*\)",.*/\1/g'
aaaaaaaaa==","offset":"0

$ echo '{"filename":"/local/iso/hello.txt","data":"aaaaaaaaa==","offset":"0","filesize":"104857600"}' | sed 's/.*"data":"\([^"]*\)".*/\1/g'
aaaaaaaaa==

   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2015-02-26 20:33 |只看该作者
但是如果data相应的字段很长,长到有100M左右的时候

1、整个文件只有一行吗?
2、如果文件是从Windows系统里面复制过来的,需要先转换成unix格式:
  1. dos2unix test.txt
复制代码

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
6 [报告]
发表于 2015-02-26 20:48 |只看该作者
回复 4# jason680

嗯,这个是贪婪的问题,但是这是你修改文件内容出现的问题
打印实际上是这样的
......AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","offset":"0"}
前面很多A,文件有100M多。即使按照你那样的[^],最后结果还是一样,就是想不明白,grep是可以的。


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
7 [报告]
发表于 2015-02-26 20:48 |只看该作者
回复 5# Shell_HAT
只有一行,不是windows的文件,里面没有特殊的字符,都是可视的


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2015-02-26 21:12 |只看该作者
回复 6# zhiwen1002

Is it sed version issue?
There is no issue with sed version 4.2.1 on Ubuntu LTS 12.04



$ wc FILE
       1        1 10000070 FILE

$ head -c 80 FILE
{"filename":"/local/iso/hello.txt","data":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

$ tail -c 80 FILE
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==","offset":"0"}

$ sed 's/.*"data":"\(.*\)",.*/\1/g' FILE > NEW

$ wc NEW
       1        1 10000012 NEW

$ head -c 80 NEW
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

$ tail -c 80 NEW
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==

$ sed --version
GNU sed version 4.2.1
...

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
9 [报告]
发表于 2015-02-27 10:55 |只看该作者
只有我没看懂题目吗?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
10 [报告]
发表于 2015-02-28 10:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP