免费注册 查看新帖 |

Chinaunix

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

sed多行模式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-21 12:33 |只看该作者 |倒序浏览
手头有一份sed高级功能学习文档,其中一部分的内容是:

D命令:
删除命令D是删除命令d的多行形式,区别在于d删除模式空间的内容并读入新行,从而在脚本顶端重新使用编辑方法。
D只删除多行模式空间的第一个嵌入的换行符以前的内容,它不会导致读入新行,相反,它返回到脚本的顶端,将这些指令应用于模式空间剩余的内容。

示例:

# 将多个空行减少到一个空行,使用d命令版本
/^$/{
N
/^\n$/d
}

测试文件如下:
This line is followed by 1 blank line.

This line is followed by 2 blank lines.


This line is followed by 3 blank lines.



This line is followed by 4 blank lines.




This is the end.


运行脚本产生一行结果:
[icepp@fc8 test]$ sed -f sed.blank test.blank
This line is followed by 1 blank line.

This line is followed by 2 blank lines.
This line is followed by 3 blank lines.

This line is followed by 4 blank lines.
This is the end.

当有偶数个空行时,所有空行都被删掉。仅当有奇数行时,有一行被保留下来,这是因为d命令删除整个模式空间的内容,一旦遇到第一个空行,就读入下一行,并且两行都被删除。如果遇到第三行,并且下行不为空行,那么d命令就不会执行,因此空行被输出。

我们将d命令换成D命令,测试如下:
[icepp@fc8 test]$ sed -f sed.blank test.blank
This line is followed by 1 blank line.

This line is followed by 2 blank lines.

This line is followed by 3 blank lines.

This line is followed by 4 blank lines.

This is the end.

得到我们预期的结果。多行Delete的工作完成的原因:当遇到两个空行的时候,D命令只删除两个空行的第一个,下次遍历脚本的时候,将导致另一行被读入模式空间。如果那行不为空,那么两行都输出,因此确保了输出一个空行。也就是当模式空间有两个空行的时候,只有第一个空行被删除。当一个空行跟有文本的时候,模式空间的内容都输出。


但经过我在AIX 5.3以及CentOS 5.4上实测,结果却是下面这样:
使用d的时候:
# sed -f sed.blank test.blank
This line is followed by 1 blank line.

This line is followed by 2 blank lines.
This line is followed by 3 blank lines.



This line is followed by 4 blank lines.


This is the end.

使用D的时候:
# sed -f sed.blank test.blank
This line is followed by 1 blank line.

This line is followed by 2 blank lines.

This line is followed by 3 blank lines.



This line is followed by 4 blank lines.



This is the end.


怎么我的执行结果和文档中的执行结果不一样呢?看文档中解释的头头是道的,应该不会有错啊。

请高手指点。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
2 [报告]
发表于 2010-06-21 13:13 |只看该作者
手头有一份sed高级功能学习文档,其中一部分的内容是:

D命令:
删除命令D是删除命令d的多行形式,区别 ...
yhou31 发表于 2010-06-21 12:33


sed有不同的版本 很多版本的行为会不同
你先看看是不是版本不同的问题

论坛徽章:
0
3 [报告]
发表于 2010-06-21 13:14 |只看该作者
回复 2# yecheng_110


    今天赌了没?

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
4 [报告]
发表于 2010-06-21 13:15 |只看该作者
回复 3# lkk2003rty

没钱了

论坛徽章:
0
5 [报告]
发表于 2010-06-21 13:18 |只看该作者
回复 4# yecheng_110


    风投啊。。。mj对冲等。。。。以醉卧赌神为榜样,向删号兄学习。。。。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
6 [报告]
发表于 2010-06-21 13:20 |只看该作者
回复 5# lkk2003rty


永远不用MJ 不求包养

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2010-06-21 14:53 |只看该作者
破产了也好。免费老想着赌

论坛徽章:
0
8 [报告]
发表于 2010-06-21 15:05 |只看该作者
成水贴了。。。

论坛徽章:
0
9 [报告]
发表于 2010-06-21 15:10 |只看该作者
楼主好可怜,辛苦的敲了那么一大段,结果帖子被转型了

论坛徽章:
0
10 [报告]
发表于 2010-09-27 09:17 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP