为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
imfinger
帖子: 45
注册时间: 2010-03-29 17:08

为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#1

帖子 imfinger » 2011-06-26 19:07

代码: 全选

[root@station198 ~]# echo '1
2
3
4
5
6 ' | sed -e '1,2d' -e '1,2d'
4
5
6
[root@station198 ~]#
为什么只删除1,2,3行?
ubuntu新手
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#2

帖子 sk1418 » 2011-06-26 19:15

http://bbs.chinaunix.net/thread-3557086-1-1.html
看上面链接回复中的5楼
---
regards,

Kent
头像
imfinger
帖子: 45
注册时间: 2010-03-29 17:08

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#3

帖子 imfinger » 2011-06-26 19:30

sk1418 写了:http://bbs.chinaunix.net/thread-3557086-1-1.html
看上面链接回复中的5楼
谢了!
ubuntu新手
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#4

帖子 fnan » 2011-06-26 22:01

个人觉得根源是如何解读sed的问题:
先设一文件:kose5@kose5-Aspire-4552:~$ cat 1
1
2
3
4
5
6
看起来“正常”情况:
kose5@kose5-Aspire-4552:~$ sed -e '1,2d' -e '2d' 1
3
4
5
6
通常会这样解读: (-e ‘1,2d’ -e ‘2’ )删除第一行到第二行, 再删除第二行。
从结果看很不错。
看起来“不正常”情况:
kose5@kose5-Aspire-4552:~$ sed -e '1,2d' -e '1,2d' 1
4
5
6
通常会这样解读: (-e ‘1,2d’ -e ‘1,2’ )删除第一行到第二行, 再删除第一行到第二行。
从结果看不对,第三行被删除了!
如果这样解读呢? (-e ‘1,2d’ -e ‘1,2’ )从第一行起删除至少执行一次,直到超过第二行停止,再从第一行起删除至少执行一次,直到到超过第二行停止。
有关 line,/pattern/d:
kose5@kose5-Aspire-4552:~$ sed -e '3d' -e '3,/3/d' 1
1
2
我这样解读: 删除第三行,再从从第三行起删除至少执行一次,直到匹配/3/的行。
有错误的话,还请指教。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#5

帖子 fnan » 2011-06-26 22:07

imfinger 的头像跟那个帖子的lionfun头像一样呢,是同个人吗?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
imfinger
帖子: 45
注册时间: 2010-03-29 17:08

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#6

帖子 imfinger » 2011-07-02 16:52

fnan 写了:imfinger 的头像跟那个帖子的lionfun头像一样呢,是同个人吗?
:em03
ubuntu新手
头像
c43035
帖子: 724
注册时间: 2008-10-22 14:29
联系:

Re: 为什么sed -e '1,2d' -e '1,2d' 只删除3行,而不是4行?

#7

帖子 c43035 » 2011-07-02 17:26

:em05 :em05

代码: 全选

www.bashell.org
亲,走过路过,不要错过
回复