免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yang200218
打印 上一主题 下一主题

怎么取出文件中匹配行之间的部分 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-07-24 09:36 |只看该作者
回复 1# yang200218
  1. # cat file
  2. aa
  3. begin
  4. cc
  5. dd
  6. end
  7. xx
  8. xx
  9. begin
  10. ee
  11. ff
  12. end
  13. gg
  14. # sed  -n '/begin/h;/end/!H;/end/{g;s/begin\n//gp}' file
  15. cc
  16. dd
  17. ee
  18. ff
复制代码
这个只要begin和end成对出现就没问题,要是缺失某一个就不行了

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
12 [报告]
发表于 2011-07-25 08:34 |只看该作者
本帖最后由 rdcwayx 于 2011-07-25 08:39 编辑
回复  rdcwayx


楼主要求“最后一个”
Shell_HAT 发表于 2011-07-22 21:20


谢谢啊, 更新一下:
  1. awk '/begin/{a=$0;t=1;next}t{a=a RS $0}/end/&&t{t=0;b=a}END{print b}' infile
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2011-07-25 09:47 |只看该作者
awk 'BEGIN{flag=0;line=0;}/begin/{line=0;flag=1;next}/end/{flag=0;}flag==1{a[line++]=$0}END{if(flag==0)for(i=0;i<line;i++)print a[i]}' urfile

论坛徽章:
0
14 [报告]
发表于 2011-07-25 12:46 |只看该作者
本帖最后由 ywlscpl 于 2011-07-25 12:48 编辑
  1. awk '/end/{T=0;s=v}/begin/{T=1;v="";next}T{v=v?v"\n"$0:$0}END{print s}' file
复制代码
  1. ywlscpl@ubuntu:~$ cat file
  2. a
  3. begin
  4. end
  5. begin
  6. begin
  7. hello
  8. world
  9. end
  10. a
  11. end
  12. this
  13. is
  14. test
  15. begin
  16. hello
  17. world
  18. end
  19. x
  20. begin
  21. xxx
  22. xxx

  23. ywlscpl@ubuntu:~$ awk '/end/{T=0;s=v}/begin/{T=1;v="";next}T{v=v?v"\n"$0:$0}END{print s}' file
  24. hello
  25. world
复制代码

论坛徽章:
0
15 [报告]
发表于 2011-07-25 13:56 |只看该作者
回复 14# ywlscpl


    这个方法不错,可是这些语句有点看不懂

论坛徽章:
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
16 [报告]
发表于 2011-07-25 22:10 |只看该作者
  1. awk 'BEGIN{FS="begin\n";RS="\nend"}{a=b;b=$NF}END{print a}' urfile
复制代码

论坛徽章:
0
17 [报告]
发表于 2011-07-27 11:29 |只看该作者
Hi,

我有一个文件 是:

begin
hello
world
end
this
is
test
begin
hello
world
end

...
yang200218 发表于 2011-07-22 18:41


tac file|sed -n '/end/, /begin/p;/begin/q'|tac
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP