免费注册 查看新帖 |

Chinaunix

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

[文本处理] [正则]sed如何实现这样指行定替换? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-15 16:08 |只看该作者 |倒序浏览
1
2
3
4
5
</>

1-5全部是变化的,只有</>是固定

现在尝试首行替换*1*
sed "/<\/>$/{1s/\([^\n]*\)/\*\1\*/}"
这样不成功...

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
2 [报告]
发表于 2013-08-15 16:22 |只看该作者
1-5全部是变化的,只有</>是固定

这个跟首行有什么关系?
  1. sed '1s/.*/*&*/'
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-08-15 16:34 |只看该作者
回复 2# WilliBhamlll

修改成这样的也没有效果!
sed "/<\/>$/{1s/.*/\*&\*/}"

必需进行以</>结束之前内容才指定行替换
   

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
4 [报告]
发表于 2013-08-15 16:42 |只看该作者
  1. sed -nr ':1;N;/<\/>/!b1;s/(.*\n)([^\n]+)((\n[^\n]+){5})/\1*\2*\3/p'
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-08-15 17:00 |只看该作者
回复 4# 代号:军刀
咦!什么内容都没有了?

   

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
6 [报告]
发表于 2013-08-15 17:11 |只看该作者
回复 5# peterdocter


    因为我那里是假设你是文本中的一小段,加个?就通用了
  1. $ cat file1
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. </>
  8. $ sed -nr ':1;N;/<\/>/!b1;s/(.*\n?)([^\n]+)((\n[^\n]+){5})/\1*\2*\3/p' file1
  9. *1*
  10. 2
  11. 3
  12. 4
  13. 5
  14. </>
  15. $ cat file2
  16. b
  17. a
  18. 1
  19. 2
  20. 3
  21. 4
  22. 5
  23. </>
  24. $ sed -nr ':1;N;/<\/>/!b1;s/(.*\n?)([^\n]+)((\n[^\n]+){5})/\1*\2*\3/p' file2
  25. b
  26. a
  27. *1*
  28. 2
  29. 3
  30. 4
  31. 5
  32. </>
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
7 [报告]
发表于 2013-08-15 17:46 |只看该作者
精彩了, 谢谢了。

论坛徽章:
0
8 [报告]
发表于 2013-08-15 17:48 |只看该作者
本帖最后由 peterdocter 于 2013-08-15 18:00 编辑

回复 6# 代号:军刀

多谢了!不过看得不什么明白?
如果我要变成替换第二行?又如何修改你的这条正则?
刚刚又测试一下,如果</>之前超过5行替换位置又变了?也就是说必须固定行数才行啊?   
{5}是倒数关系,从</>倒数到开头?如果让它非倒数,是否就可以了?

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
9 [报告]
发表于 2013-08-15 20:25 |只看该作者
@代号:军刀
  1. $ sed -r ':1;N;/<\/>/!b1;s/(.*\n?)([^\n]+)((\n[^\n]+){5})/\1*\2*\3/' file
  2. bbbb
  3. aaaa
  4. 111*1*
  5. 2
  6. 3
  7. 4
  8. 5
  9. </>
复制代码

论坛徽章:
0
10 [报告]
发表于 2013-08-15 20:36 |只看该作者
回复 9# cao627

多谢老兄指bugs,有否解决方案?
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP