免费注册 查看新帖 |

Chinaunix

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

sed对模式空间操作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-11 13:03 |只看该作者 |倒序浏览
$cat file
a
b
c
d
$ cat file | sed 'N;D'
结果是打印出尾行。按照我的理解应该是打印出偶数行。请求各位解释一下。

论坛徽章:
0
2 [报告]
发表于 2004-02-11 15:20 |只看该作者

sed对模式空间操作的问题

我的粗浅理解:
开始pattern空间为空

第一轮:
然后sed读入第一行,pattern为a,
接着执行N再读入一行,pattern为a b两行,
然后执行D删除pattern中第一行,pattern为b行.
经过D后sed将进入下一轮。

第二轮:
由于上一轮经过D后pattern中仍不为空,sed不自动读下一行,
执行N再读入一行,pattern为b c两行,
然后执行D删除pattern中第一行,pattern为c行.
经过D后sed将进入下一轮。

第三轮:
同第二轮,最后pattern中为d行.

第四轮:
没什么可读的了,用空替换pattern, pattern中原来的值被送到屏幕。

论坛徽章:
0
3 [报告]
发表于 2004-02-12 10:56 |只看该作者

sed对模式空间操作的问题

原帖由 "飞灰橙之春天升级版" 发表:
我的粗浅理解:
由于上一轮经过D后pattern中仍不为空,sed不自动读下一行,..........

原来是这样,sed的模式空间必须为空才能自动读取下一行。那么sed -n 'p' file
这个p命令是打印出模式空间的内容后把模式空间给清除了?这样它才能自动读取下一行?能肯定是这样的吗?

论坛徽章:
0
4 [报告]
发表于 2004-02-12 11:42 |只看该作者

sed对模式空间操作的问题

输出结果是
d

就是d后面还有输出的东西,空行??回车?
那是哪里来的呢???

论坛徽章:
0
5 [报告]
发表于 2004-02-12 15:34 |只看该作者

sed对模式空间操作的问题

原帖由 "labrun" 发表:

原来是这样,sed的模式空间必须为空才能自动读取下一行。那么sed -n 'p' file
这个p命令是打印出模式空间的内容后把模式空间给清除了?这样它才能自动读取下一行?能肯定是这样的吗?


不是这样,p不改变pattern空间的内容。
man sed中的解释
D      Delete  up  to  the first embedded newline in the pattern space.
              Start next cycle, but skip reading from the input  if  there  is
              still data in the pattern space.

这个不读下一行的动作,是特定于使用D命令时才会有的。

论坛徽章:
0
6 [报告]
发表于 2004-02-13 11:02 |只看该作者

sed对模式空间操作的问题

我在SCO UNIX\AIX 下测试好象什么都没有打出

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-02-13 11:50 |只看该作者

sed对模式空间操作的问题

SCO UNIX:
  1. cat filename | sed '$!{N;D;}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP