免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: meeslo
打印 上一主题 下一主题

请教sed "D"操作问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-14 01:23 |显示全部楼层 |倒序浏览
举个例子:
类似显示最后两行
tail -2
  1. seq 5|sed '$!N;$!D'
复制代码


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.

这个应该如何解释比较澳合理?
"but skip reading from the input" 这个不明白怎么解释.

  1. seq 5|sed '$!N;$!D'
复制代码

不是最后一行就"N" 读取下一行追加到当前行,不是最后一行就"D"删除模式空间里面的第一个换行前的内容.
第一行 1 读入变成 1\n2, D操作是否变成2?
第三行 3 读入变成 3\n4, D操作后是否变成4?
如果是这样,那结果就变成
2
4
5
肯定是不对了.
想了N久实在没想明白,:em11:

论坛徽章:
0
2 [报告]
发表于 2008-07-15 00:08 |显示全部楼层
看到这么多回复实在是感动啊..
后来下载了sed & awk , 在仔细琢磨了一番,终于明白了,关键在于"skip reading from the input ",这个不同与单行模式,就等于匹配模式如果还有内容,就不直接到下一行.
正如3楼所解释的!

论坛徽章:
0
3 [报告]
发表于 2008-07-15 00:26 |显示全部楼层

回复 #21 mystérieux 的帖子

  1. # seq 10 | sed ':1;1,5{N;b1};7!D'
  2. 7
复制代码



这个是因为:到第七行是6时是
1\n2\n3\n4\n5\n6
然后因为不是第七行,所以就D,
这时候剩下
2\n3\n4\n5\n6
以为模式空间还有以上的内容,同事也不是第七行,所以就继续D
3\n4\n5\n6
.....
直到被删除光了才跳到第七行.

论坛徽章:
0
4 [报告]
发表于 2008-07-15 00:31 |显示全部楼层
原帖由 li2002 于 2008-7-14 21:01 发表
不要想得太复杂了,其实D很简单的,你的那个
sed  ':1;1,5{N;b1};7!D'   等价于
sed -n ':1;1,5{N;b1};7!D;p'

由于7行不D,不自动从头循环,所以执行了p,显示了7

你用r2007说的sedsed工具好好看看每步执 ...


看来我是理解对了..还是经过一番讨论后,渐渐就清晰起来了.

论坛徽章:
0
5 [报告]
发表于 2008-07-15 00:34 |显示全部楼层
这里有一段对D的解释
函数参数 D 表示删除 pattern space 内的第一行资料。其指令格式如下:   

    [address1,address2]D


对上述格式有下面几点说明 :   

函数参数 D 最多配合两个位址参数。  
函数参数 D 与 d 的比较如下 :  
当 pattern space 内只有一资料行时 , D 与 d 作用相同。  
当 pattern space 内有多行资料行时  
D 表示只删除 pattern space 内第一行资料 ; d 则全删除。  
D 表示执行删除後 , pattern space 内不添加下一笔资料 , 而将剩下的资料重新执行 sed script ; d 则读入下一行後执行 sed script。


关键就在于 "D 表示执行删除後 , pattern space 内不添加下一笔资料 , 而将剩下的资料重新执行 sed script ; d 则读入下一行後执行 sed script。" 这句话..呵呵

[ 本帖最后由 meeslo 于 2008-7-15 00:35 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2010-05-19 17:14 |显示全部楼层
好久没用又给忘记了,翻回来复习一下.!╮(╯▽╰)╭
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP