免费注册 查看新帖 |

Chinaunix

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

使用sed时遇到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-06 17:15 |只看该作者 |倒序浏览
各位好,我在使用sed命令时遇到了一个小问题,希望可以得到各位的指点。。
环境 -- AIX 5.3:
Syntax
       sed [ -n ] Script [ File ... ]
       sed [ -n ] [ -e Script ] ... [ -f ScriptFile ] ... [ File ... ]

问题:
对于一个文件,A,B,C,D,E分别代表 包含 不同关键字的 一行字符串,那么如果一个文本包含9行字符串如下:
A
B
C
A
B
D
A
B
E
(1)对于出现A,并且A的下一行是B,并且B的下一行是C的情况,删除A,B,C三行
(2)对于出现D,直接删除D
那么期望输出结果如下(不应该包含空白行):
A
B
A
B
E

我的方法,别笑话啊,我用sed的时间不长:
/A/{
        N
        /B/{
                N
                /C/{
                        d
                }
        }
}
/D/{
        s/\(.*\n\)*.*D.*/\1/g
}

结果出现多个空白行,不符合题目要求,请教各位! 在此谢过!

论坛徽章:
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 [报告]
发表于 2007-11-06 17:30 |只看该作者
sed -n '1h;1!H;${g;s/A\nB\nC\n*//g;s/D\n*//g;p;}' urfile

论坛徽章:
0
3 [报告]
发表于 2007-11-06 17:39 |只看该作者

  1. xargs <file|sed 's/A B C //g;s/ D//g;s/ /\n/g'
复制代码

[ 本帖最后由 davistar 于 2007-11-6 17:55 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-11-06 18:38 |只看该作者
多谢2位的指点,这里有个真实的实例,test.txt:
[11/1/07 15:01:51:900 EDT] 00000071
Code: {http://}
String: ResourceException:
[11/1/07 15:01:51:934 EDT] 00000072
Code: {http://}
String: ServiceUnavailableException:
ServiceUnavailableException:
Caused by: ServiceUnavailableException:
Reason by: UnavailableException:

A: [.*]
B: Code:
C: ResourceException:
D: ServiceUnavailableException:
E: UnavailableException:

结果应该是:
[11/1/07 15:01:51:934 EDT] 00000072
Code: {http://}
Reason by: UnavailableException:


那么请教如何替换这几个关键词呢,谢谢!

[ 本帖最后由 cpfly 于 2007-11-6 18:54 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-11-06 20:06 |只看该作者
  1. sed '/ServiceUnavailableException:/d' fileA | sed '/.*/{N;/Code:/{N;/ResourceException:/d}}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-11-07 10:14 |只看该作者
sed -n '1h;1!H;${g;s/A\nB\nC\n*//g;s/D\n*//g;p;}' urfile


解释下吧 呵呵不太懂

论坛徽章:
0
7 [报告]
发表于 2007-11-08 17:51 |只看该作者
我的理解是,从第一行开始读1h,一直读1!H,也就是读到最后一行,那么$代表整个的文本,进去后,g拿到之前h,H命令放到hold space里面的所有文本,s/..//g.就是替换,p就是输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP