免费注册 查看新帖 |

Chinaunix

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

[文本处理] 用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
11 [报告]
发表于 2015-07-22 12:43 |只看该作者
本帖最后由 jason680 于 2015-07-22 12:56 编辑

回复 1# kinger7777

What You Want Is What You Code(WYWIWYC)

>> ...匹配特定字符是2015002要把这字符所在的行及前三行的{YES}替换成{NO}


$ awk -vb=3 -vk="2015002" '$0~k{for(n=0;n<=b;n++)ch[NR-n]=1}{a[NR]=$0}END{for(n=1;n<=NR;n++){if(ch[n])if(a[n]~"YES")gsub("YES","NO",a[n]);else gsub("NO","YES",a[n]);print a[n]}}' FILE
bug:[aaaxxx]test1
        set{YES}
bug:[aaasss]set{YES}
bug:[aaacd]888
bug:[aaadc]log:2015001 set{YES}
bug:[aaaxxx]log=2015001 set{YES}

bug:[aaaxxx]test1
        set{NO}
bug:[aaasss]set{NO}
bug:[aaacd]888
bug:[aaadc]log:2015002 set{NO}
bug:[aaaxxx]log:2015002 set{NO}

bug:[aaaxxx]test1
        set{YES}
bug:[aaasss]set{YES}
bug:[aaacd]888
bug:[aaadc]log:2015003 set{YES}
bug:[aaaxxx]log:2015003 set{YES}

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
12 [报告]
发表于 2015-07-22 12:48 |只看该作者
本帖最后由 haooooaaa 于 2015-07-22 12:51 编辑

回复 11# jason680


    学习了, 三目运算, 折腾  gsub, 刚才真被 这个搞晕了.

还好没有同一行有 两个 一个YES一个NO, 这样更晕

论坛徽章:
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
13 [报告]
发表于 2015-07-22 12:58 |只看该作者
回复 12# haooooaaa

(11楼)改了,三目运算 不合适



   

论坛徽章:
0
14 [报告]
发表于 2015-07-22 13:01 |只看该作者
回复 10# haooooaaa


    如果是NO就改成YES,如果是YES就改成NO,这里可能要加个判断之类

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
15 [报告]
发表于 2015-07-22 13:12 |只看该作者
回复 14# kinger7777


    上面的 jason680 搞定了,

论坛徽章:
0
16 [报告]
发表于 2015-07-22 13:16 |只看该作者
回复 11# jason680


    这个只能把YES改成NO.如果是NO改不成YES

论坛徽章:
0
17 [报告]
发表于 2015-07-22 13:25 |只看该作者
回复 15# haooooaaa

这个如果是NO的话不能改成YES
   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
18 [报告]
发表于 2015-07-22 13:28 |只看该作者
回复 17# kinger7777


    可以的....
  1. $ more 2.txt
  2. bug:[aaaxxx]test1
  3.         set{YES}
  4. bug:[aaasss]set{YES}
  5. bug:[aaacd]888
  6. bug:[aaadc]log:2015001 set{YES}
  7. bug:[aaaxxx]log=2015001 set{YES}

  8. bug:[aaaxxx]test1
  9.         set{YES}
  10. bug:[aaasss]set{NO}
  11. bug:[aaacd]888
  12. bug:[aaadc]log:2015002 set{NO}
  13. bug:[aaaxxx]log:2015002 set{YES}

  14. $ awk -vb=3 -vk="2015002" '$0~k{for(n=0;n<=b;n++)ch[NR-n]=1}{a[NR]=$0}END{for(n=1;n<=NR;n++){if(ch[n])if(a[n]~"YES")gsub("YES","NO",a[n]);else gsub("NO","YES",a[n]);print a[n]}}'  2.txt
  15. bug:[aaaxxx]test1
  16.         set{YES}
  17. bug:[aaasss]set{YES}
  18. bug:[aaacd]888
  19. bug:[aaadc]log:2015001 set{YES}
  20. bug:[aaaxxx]log=2015001 set{YES}

  21. bug:[aaaxxx]test1
  22.         set{NO}
  23. bug:[aaasss]set{YES}
  24. bug:[aaacd]888
  25. bug:[aaadc]log:2015002 set{YES}
  26. bug:[aaaxxx]log:2015002 set{NO}
复制代码

论坛徽章:
0
19 [报告]
发表于 2015-07-22 13:35 |只看该作者
本帖最后由 kinger7777 于 2015-07-22 13:36 编辑

回复 18# haooooaaa

是可以的.我测试的问题.只是只print出来,不替换原文件.能不能直接修改掉.


   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
20 [报告]
发表于 2015-07-22 13:38 |只看该作者
回复 19# kinger7777


    后面加上  


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP