免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed截取第一个关键词和最后一个关键词之间的所有行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-16 15:15 |只看该作者 |倒序浏览
求助,需要处理一个这样的文件:
[root@dbtest sedtest]# cat 2.txt
aaa
iii
kkk
aaa
iiio
jijfie
jifjei
aaa
jifoeojfg
jfioejfops
jfiosjef
jiofoesj
33333
aaa

需要将第一行aaa和最后一行aaa之间的东西全部输出,因为中间也有可能有aaa的行,因此会造成干扰
本人失败的命令如下,不晓得如何修改,求大神出手:
[root@dbtest sedtest]# sed -n  '/aaa/,/aaa/p' 2.txt
aaa
iii
kkk
aaa
aaa
jifoeojfg
jfioejfops
jfiosjef
jiofoesj
33333
aaa

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
2 [报告]
发表于 2015-07-16 15:30 |只看该作者
  1. awk -vRS="" -vFS="aaa" '{for(i=2;i<NF;i++)printf FS$i}END{print FS}' urfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-07-16 15:33 |只看该作者
回复 2# Buring__


    谢谢这位大侠的解决方案,但是用awk我也想到了可以,只是比较纠结是不是可以用sed实现。

论坛徽章:
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-07-16 15:35 |只看该作者
回复 1# Azrael0507

try this way ...

$ awk '{s=s$0"\n"}/^aaa/{if(c++){printf s;s=""}else s=$0"\n"}' 2.txt

   

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [报告]
发表于 2015-07-16 15:38 |只看该作者
回复 1# Azrael0507


如果文件不是很大:
  1. sed -n '/aaa/{:a;N;$!ba;s/\(.*aaa\).*/\1/p}' file
复制代码

论坛徽章:
0
6 [报告]
发表于 2015-07-16 16:17 |只看该作者
回复 5# ly5066113


    非常感谢,看来还是需要分支判断,多谢啦。

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
7 [报告]
发表于 2015-07-16 16:27 |只看该作者
  1. #!/usr/bin/env python
  2. #_*_ coding:utf-8 _*_

  3. def check(test,filename):
  4.     check_list = []
  5.     with open(filename,'r') as f:
  6.         for line in f.readlines():
  7.             line = line.strip()
  8.             check_list.append(line)
  9.             
  10.     start_index = check_list.index(test) + 1
  11.     end_index = check_list.index(test,-1) - 1
  12.     for num in range(start_index,end_index):
  13.         print check_list[num]
  14.    
  15. check ('aaa','file.txt')
复制代码

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
8 [报告]
发表于 2015-09-06 16:24 |只看该作者
回复 5# ly5066113


    替换那有些问题吧?sed -n '/aaa/{:a;N;$!ba;s/aaa\(.*\).*aaa$/\1/p}' test.txt

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
9 [报告]
发表于 2015-09-06 16:26 |只看该作者
回复 5# ly5066113


sed -n '/aaa/{:a;N;$!ba;s/aaa\n\(.*\)\naaa$/\1/p}' test.txt这样可以,


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2015-09-06 16:57 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-06 16:58 编辑

回复 5# ly5066113
代码超赞! 向您致敬!

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP