免费注册 查看新帖 |

Chinaunix

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

sed缓冲区里行号是不是就不是按原本的理解方式了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-19 16:13 |只看该作者 |倒序浏览
假设删除几行之后的结果如下
# sed -e '1,/value/d' file
192.168.1.1
192.168.1.2  

如果想打印删除之后第一行的结果一开始的命令写成
# sed -e '1,/value/d' -n -e '1p' file
没有任何输出

# sed -e '1,/value/d' -n -e '2p' file
没有任何输出

但是如果写成
# sed -e '1,/value/d' -n -e '1,2p' file
192.168.1.1
能打印出东西

求解释~不针对解决问题的合理性只想问下这种现象的原因

论坛徽章:
0
2 [报告]
发表于 2012-03-19 16:26 |只看该作者
估计lz发现bug了

  1. sh.exe"-3.1$ echo 'a
  2. > b
  3. > c' | sed -ne '1,2d;1,2p;'
  4. c
  5. sh.exe"-3.1$ echo 'a
  6. > b
  7. > c' | sed -ne '1,2d;3p;'
  8. c
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-03-19 16:36 |只看该作者
回复 2# hbmhalley

额,什么意思? sed本身的bug?

论坛徽章:
0
4 [报告]
发表于 2012-03-19 17:01 |只看该作者
命令行下多个-e命令相当于将一个命令组应用于sed中pattern space中的每一行.
当pattern space中输入一行,第一条命令判断是否输入行是否是第一行与第一次出现value的行之间,如果是则删除pattern space中的该行输入内容,因为pattern space中没有内容了,会导致控制流回到sed命令组的顶端也即第一条命令.
这个跟多行删除D命令是不一样的意思.
因此:

  1.    输入文件:
  2.     1
  3.     value
  4.    192.168.1.1
  5.    192.168.1.2
  6.    命令:
  7.    sed -e '1,/value/d'  -ne '3p' testfile
  8.    输出:
  9.    192.168.1.1  
  10.    但:
  11.    sed -e '1,/value/d'  -ne '1,2p' testfile 无法输出你想要的结果.  
复制代码
这就是sed的处理机制,不算bug吧,个人理解,请指正.

论坛徽章:
0
5 [报告]
发表于 2012-03-19 18:14 |只看该作者
回复 3# gaoshoupei


    对.

回复 4# regansong


    解释下2L的'c'到底是第二行还是第三行吧

论坛徽章:
0
6 [报告]
发表于 2012-03-19 18:16 |只看该作者
这个d干里什么呢~~~~~
看man
d      Delete pattern space.  Start next cycle.

论坛徽章:
0
7 [报告]
发表于 2012-03-19 18:48 |只看该作者
回复 6# nuclearxin


    问题是 p 为什么会起作用

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
8 [报告]
发表于 2012-03-19 19:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2012-03-19 19:23 |只看该作者
回复 8# zooyo


    可事实是执行 p 了。怎么解释

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
10 [报告]
发表于 2012-03-19 19:31 |只看该作者
  1. [winway@winway test]$ cat urfile                  
  2. a
  3. b
  4. c
  5. d
  6. e
  7. f
  8. [winway@winway test]$ sed -n '1,2d;=;1,2p' urfile
  9. 3
  10. c
  11. 4
  12. 5
  13. 6
复制代码
为什么对于第三行,能满足1,2这个条件,而打印c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP