免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed截取(删除)段的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-18 11:22 |只看该作者 |倒序浏览
本帖最后由 hualing119 于 2014-07-18 11:26 编辑

比如说我有一段文本如下:
server
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
server
10.0.0.6
10.0.0.7
10.0.0.8
10.0.0.9

我用sed -n '/server/,/server/p' 2.txt 是可以截取到
server
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
server

但是我不要最后一个server!
但是我要一个sed里面解决 不要sed -n '/server/,/server/p' 2.txt | sed '$d'这种!!

因为其实我是想要吧server连着下面的ip删除,但是保留下一个server类似这样
执行命令后得到

server
10.0.0.6
10.0.0.7
10.0.0.8
10.0.0.9

之所以用sed是希望sed -i 直接删除掉。。写入文件 而不是只是显示在命令行里

论坛徽章:
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
2 [报告]
发表于 2014-07-18 11:26 |只看该作者
回复 1# hualing119


这个描述很矛盾啊,貌似是这个意思:
  1. sed -n '/server/{h;b};H;${g;p}' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-07-18 11:28 |只看该作者
回复 2# ly5066113


    2个单词!NB!!不过能否在改进一下 。。就是其实我是希望能吧这个写入到文件中。实际就是在文件里面删除掉。实现sed -i这种效果。

论坛徽章:
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
4 [报告]
发表于 2014-07-18 13:11 |只看该作者
回复 3# hualing119
  1. sed -i '/server/{:a;N;/\nserver/!ba;s/.*\n//}' file
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-07-18 13:37 |只看该作者
回复 4# ly5066113


    牛!

论坛徽章:
0
6 [报告]
发表于 2014-07-18 15:22 |只看该作者
ly5066113
很牛的,正在看他的一些文章。

论坛徽章:
1
巨蟹座
日期:2014-06-10 23:03:47
7 [报告]
发表于 2014-07-18 15:32 |只看该作者
是这样的效果吗?
  1. [root@APP ~]# cat file
  2. server
  3. 10.0.0.1
  4. 10.0.0.2
  5. 10.0.0.3
  6. 10.0.0.4
  7. 10.0.0.5
  8. server
  9. 10.0.0.6
  10. 10.0.0.7
  11. 10.0.0.8
  12. 10.0.0.9
  13. [root@APP ~]# sed -i -rn '/server/,/server/{G;s/server\n.+//;ta;;s/(.*)\n(.*)/\1/;p;h;:a}' file
  14. [root@APP ~]# cat file
  15. server
  16. 10.0.0.1
  17. 10.0.0.2
  18. 10.0.0.3
  19. 10.0.0.4
  20. 10.0.0.5
复制代码
回复 1# hualing119


   

论坛徽章:
1
巨蟹座
日期:2014-06-10 23:03:47
8 [报告]
发表于 2014-07-18 15:35 |只看该作者
貌似我理解错lz的意思了{:3_188:}

论坛徽章:
0
9 [报告]
发表于 2014-07-18 16:55 |只看该作者
回复 8# zhleiling


    呵呵 你也很牛!这个也行的。。 可能我的说明不太好表示。其实就是想要实现把中间匹配的一段删除。
server
123
123
123
server
111
111
111
server
222
222
222

删除server到下一个server前的内容。

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
10 [报告]
发表于 2014-07-19 11:46 |只看该作者
本帖最后由 lifayi2008 于 2014-07-19 12:04 编辑

awk的
  1. awk '{if($0=="server"){delete a;a[i=0]=$0}else{a[++i]=$0}}END{for(j in a)print a[j]>FILENAME}' a.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP