免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
31 [报告]
发表于 2008-07-14 21:17 |只看该作者

回复 #30 mystérieux 的帖子

这和ly5066113 说的并不矛盾,你没仔细看。

li2002 也在上面说清楚了。

论坛徽章:
0
32 [报告]
发表于 2008-07-14 21:17 |只看该作者
ly5066113 说:“如果没有条件限制,它会删光模式空间。”看看下面这个删光没有?
# seq 5 | sed ':1;1,5{N;b1};D'
1
2
3
4
5

论坛徽章:
0
33 [报告]
发表于 2008-07-14 21:18 |只看该作者
原帖由 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工具好好看看每步执 ...

你这个挺酷。

论坛徽章:
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
34 [报告]
发表于 2008-07-14 21:19 |只看该作者

回复 #32 mystérieux 的帖子

你没有了解条件的含义,就是里面包含了某些条件,所以才有输出,你把N去掉试试,或者把5改成4试试。

论坛徽章:
0
35 [报告]
发表于 2008-07-14 21:21 |只看该作者
我原来说这就是skip,多行后面必须还遗留有东西,才能继续删前面的,他否定我的说法,说“如果没有条件限制,它会删光模式空间。”,实际上还是我说的对。

论坛徽章:
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
36 [报告]
发表于 2008-07-14 21:26 |只看该作者
原帖由 mystérieux 于 2008-7-14 21:21 发表
我原来说这就是skip,多行后面必须还遗留有东西,才能继续删前面的,他否定我的说法,说“如果没有条件限制,它会删光模式空间。”,实际上还是我说的对。

D man中的skip是指略过读入下一行(即不读入下一行)。

D删除是没有像你说的“必须还遗留有东西”的条件,删除就是删除。

论坛徽章:
0
37 [报告]
发表于 2008-07-14 21:27 |只看该作者
原帖由 blackold 于 2008-7-14 21:19 发表
你没有了解条件的含义,就是里面包含了某些条件,所以才有输出,你把N去掉试试,或者把5改成4试试。


不要混淆了广义上的条件与狭义的条件
狭义的条件是指程序上的, 比如 $! 它说的是这个意思
广义上的条件包含的多了,如果今天家里停电,这个程序结果也打出不来,这也算是条件么?
我说是skip,他却不承认。楼主引的那几句英文说的明明就是这个。

论坛徽章:
0
38 [报告]
发表于 2008-07-14 21:27 |只看该作者
这里有一段对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。

论坛徽章:
0
39 [报告]
发表于 2008-07-14 21:29 |只看该作者
原帖由 blackold 于 2008-7-14 21:26 发表

D man中的skip是指略过读入下一行(即不读入下一行)。

D删除是没有像你说的“必须还遗留有东西”的条件,删除就是删除。


那你对32楼的那个例子怎么解释?

论坛徽章:
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
40 [报告]
发表于 2008-07-14 21:29 |只看该作者

回复 #38 li2002 的帖子

Good job!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP