免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed 行匹配时,如何在匹配到的多行里选择特定行? [复制链接]

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-23 14:57 |只看该作者 |倒序浏览
本帖最后由 tank064 于 2014-01-23 15:01 编辑

RT:
  1. [benny@monitor ~]$ cat aa
  2. OKOK
  3. benny123
  4. ddaa
  5. bennyaaa
  6. bennyaasdkf
  7. 123
复制代码
用awk实现
  1. [benny@monitor ~]$ awk -v a=1 '{if($0~"benny"){if(a==1)print;a++}else print}' aa
  2. OKOK
  3. benny123
  4. ddaa
  5. 123
复制代码
如果需要第二个含"benny"的匹配行, 修改(a==2)就好了,

sed 如何实现?

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
2 [报告]
发表于 2014-01-23 16:12 |只看该作者
大神们都回家过年了吗...

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2014-01-23 16:54 |只看该作者
  1. $ cat i
  2. OKOK
  3. benny123
  4. ddaa
  5. bennyaaa
  6. bennyaasdkf
  7. 123

  8. #只打印第一次匹配到benny的行
  9. $ sed -r '/benny/{x;s/^/./;/.{2}/{x;d};x}' i
  10. OKOK
  11. benny123
  12. ddaa
  13. 123

  14. #只打印前两次匹配到benny的行
  15. $ sed -r '/benny/{x;s/^/./;/.{3}/{x;d};x}' i
  16. OKOK
  17. benny123
  18. ddaa
  19. bennyaaa
  20. 123
复制代码

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
4 [报告]
发表于 2014-01-23 17:18 |只看该作者
回复 3# yestreenstars

又是 "昨夜星辰" 兄, 先谢谢了!


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
5 [报告]
发表于 2014-01-23 21:24 |只看该作者
这个也许就不适合sed来处理吧,如果是只打印第偶数次匹配到的行(一行匹配多个算一个)sed 好实现吗?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2014-01-26 16:55 |只看该作者

用 sed |sed|sed
多sed几次不就行了

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2014-01-26 17:15 |只看该作者
回复 5# elu_ligao

木有难度:
  1. $ cat i
  2. OKOK
  3. benny123
  4. ddaa
  5. bennyaaa
  6. bennyaasdkf
  7. 123
  8. OKOK
  9. benny123
  10. ddaa
  11. bennyaaa
  12. bennyaasdkf
  13. 123
  14. $ sed -r '/benny/{x;s/^/./;/.{2}/{z;x;b};x;d}' i
  15. OKOK
  16. ddaa
  17. bennyaaa
  18. 123
  19. OKOK
  20. benny123
  21. ddaa
  22. bennyaasdkf
  23. 123
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP