免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed 找到内容的匹配写法求助【已解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-31 22:57 |只看该作者 |倒序浏览
本帖最后由 guobiao_cn 于 2015-06-01 10:04 编辑

HI,ALL:
          帮忙写一个sed表达式,感谢。
          需求如下:
          1、匹配到该行的内容时,打印出上三行内容
          2、匹配到该行的内容时,打印出下三行内容
          注:显示时不包括匹配到该内容,感谢。
          示例:
                123
                456
                789
                012 假设匹配到012内容,打印出 123 456 789内容,假设匹配到012内容,打印出 345 567 890内容.
                345
                567
                890


试用过这样的写法,sed -n '/012/ 3{x;p};h' 不行,感谢大侠帮助下。

解决方法:(找到内容所在行号)
sed -n ''$行号变量',+3p' file

感谢各位,只是要显示前三行没有用sed or awk实现。

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015小元宵徽章
日期:2015-03-06 15:58:18每日论坛发贴之星
日期:2015-06-08 22:20:00每日论坛发贴之星
日期:2015-06-08 22:20:00操作系统版块每日发帖之星
日期:2015-06-14 22:20:00数据库技术版块每日发帖之星
日期:2015-11-09 06:20:00数据库技术版块每日发帖之星
日期:2016-02-22 06:20:0015-16赛季CBA联赛之上海
日期:2017-01-01 23:58:53
2 [报告]
发表于 2015-05-31 23:37 |只看该作者
本帖最后由 zl624867243 于 2015-05-31 23:39 编辑

grep -A 3 '012' file | tail -3

cat  file | grep -C 3  '012'  | head -3

论坛徽章:
1
2015亚冠之鹿岛鹿角
日期:2015-05-12 13:04:44
3 [报告]
发表于 2015-06-01 00:07 |只看该作者
  1. awk '{a[FNR]=$0}/012/{for(i=FNR-3;i<FNR;i++)print a[i];for(i=1;i<=3;i++){getline;print}}'
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2015-06-01 00:53 |只看该作者
回复 1# guobiao_cn


后三行比较简单
sed -n '/012/,+3{//d;p}' i

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
5 [报告]
发表于 2015-06-01 01:32 |只看该作者
本帖最后由 songyc_2015 于 2015-06-01 01:45 编辑

回复 1# guobiao_cn
  1. 1.sed -n ':b;/012/{1z;s#\n012$##;$!N;$!N;$!N;s#^\n##;p;q};:a;N;/012/bb;4,/012/D;ba;' file
  2. 2.sed -n ':b;/012/,+3{1d;s#\n012$##;p;d};:a;N;/012/bb;4,/012/D;ba;' file
  3. 3.awk '/\<012\>/{for(i=NR-3;i<NR;i++)if(a[i%3])print a[i%3];p=1;n=NR;}{a[NR%3]=$0}p&&NR>n&&NR-n<=3' file
  4. 结果:
  5. 123
  6. 456
  7. 789
  8. 345
  9. 567
  10. 890
复制代码

论坛徽章:
0
6 [报告]
发表于 2015-06-01 09:36 |只看该作者
回复 5# songyc_2015

不错,不过我的不是连续在一起的,抱歉。

是二个写法,一个是显示上三行,一个是显示下三行,并不是说一条语句将上三行与下三行都打印出来。


感谢。
   

论坛徽章:
0
7 [报告]
发表于 2015-06-01 09:38 |只看该作者
回复 4# Herowinter

有效,感谢。


   

论坛徽章:
0
8
发表于 2015-06-01 09:40
回复 3# A_Traveler

感谢。


   

论坛徽章:
0
9 [报告]
发表于 2015-06-01 09:42 |只看该作者
回复 2# zl624867243

感谢,方便的话最好用sed来读。


   

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
10 [报告]
发表于 2015-06-01 09:43 来自手机 |只看该作者
分开就比较容易了……把上面命令拆开就行……,可以自己试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP