分页: 1 / 1

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

发表于 : 2011-06-26 19:07
imfinger

代码: 全选

[root@station198 ~]# echo '1
2
3
4
5
6 ' | sed -e '1,2d' -e '1,2d'
4
5
6
[root@station198 ~]#
为什么只删除1,2,3行?

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

发表于 : 2011-06-26 19:15
sk1418
http://bbs.chinaunix.net/thread-3557086-1-1.html
看上面链接回复中的5楼

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

发表于 : 2011-06-26 19:30
imfinger
sk1418 写了:http://bbs.chinaunix.net/thread-3557086-1-1.html
看上面链接回复中的5楼
谢了!

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

发表于 : 2011-06-26 22:01
fnan
个人觉得根源是如何解读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/的行。
有错误的话,还请指教。

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

发表于 : 2011-06-26 22:07
fnan
imfinger 的头像跟那个帖子的lionfun头像一样呢,是同个人吗?

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

发表于 : 2011-07-02 16:52
imfinger
fnan 写了:imfinger 的头像跟那个帖子的lionfun头像一样呢,是同个人吗?
:em03

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

发表于 : 2011-07-02 17:26
c43035
:em05 :em05