免费注册 查看新帖 |

Chinaunix

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

还是范围问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-13 23:20 |只看该作者 |倒序浏览
sed '/pos1/,/pos2/d'  urfile

这个命令是删除 pos1和pos2之间并包括这两行,并且如果在第一个pos2后面还出现了pos1,

则继续执行删除命令,直到找到pos2或文档结尾。

问题是,如果我只想删除pos1与pos2之间的以及这两行,如果没有pos2,则不删,该怎么写呢?

如果是想删除pos1和pos2之间的但不包括这两行,又怎么写呢?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2010-04-14 09:06 |只看该作者
回复 1# lonol


    修改程序或者使用其它工具,如awk.

论坛徽章:
0
3 [报告]
发表于 2010-04-14 09:39 |只看该作者

  1. 试试:
  2. sed '/pos1/{:a;N;/pos2/d;ba}' 数据文件

  3. 思路:遇到pos1就开始循环读,如果遇到pos2,就删除这些内容,否则,直到结尾并显示

复制代码

论坛徽章:
0
4 [报告]
发表于 2010-04-14 09:48 |只看该作者
写一个很挫的awk
针对第一个问题
  1. awk 'BEGIN{last_pos=1;cnt=1} {if($0~/begin/) {last_pos=NR; a[cnt]=$0;cnt++;}else {if($0 ~/end/) cnt=last_pos; else {a[cnt]=$0;cnt++;}}}  END{for(i=1;i<=cnt-1;i++) printf("%s\n",a[i]); printf("%s",a[cnt])}' file
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-04-14 09:57 |只看该作者
回复 1# lonol


    awk '/pos1/{print $0;while(1){getline;if($0 ~ /pos2/){break}else{$0=null}}}1' test40.txt

论坛徽章:
0
6 [报告]
发表于 2010-04-14 11:30 |只看该作者
  1. awk '/pos1/{if(a)print a;flag=1;a=$0;next}{if(!flag)print;else  a=a"\n"$0}/pos2/&&flag==1{a=a"\n"$0;flag=0}END{if(flag==1) print a} '  myfile
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-04-14 11:44 |只看该作者
5楼代码好像有一点问题

论坛徽章:
0
8 [报告]
发表于 2010-04-14 11:44 |只看该作者
回复 7# ghp268


    3l的也不行,呵呵。不过思路挺对的。

论坛徽章:
0
9 [报告]
发表于 2010-04-14 11:46 |只看该作者
回复 7# ghp268


    [root@commserver: /tmp]#more test40.txt
djkfjsdf
sdfjasf
afj
pos1
fdsf
sdfsd
pos2
sdfasdjfds
fasdf
[root@commserver: /tmp]#awk '/pos1/{print $0;while(1){getline;if($0 ~ /pos2/){break}else{$0=null}}}1' test40.txt
djkfjsdf
sdfjasf
afj
pos1
pos2
sdfasdjfds
fasdf



没问题啊~我不测试过不敢发上去的

论坛徽章:
0
10 [报告]
发表于 2010-04-14 11:47 |只看该作者
LZ的意思是删除POS1和POS2之间的内容。但是POS1和POS2保留不是吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP