- 论坛徽章:
- 1
|
本帖最后由 mingming_song 于 2012-11-30 00:45 编辑
# cat test
111111
222222
333333
444444
555555
666666
777777
888888
999999
紧接着我想测试-e的使用,所以使用如下
# sed -e '2,3d' -e '2,4d' test
111111
555555
666666
777777
888888
999999
后来自己闲的没事,改了下上面的命令
# sed -e '2,3d' -e '2,3d' test
111111
555555
666666
777777
888888
999999
问题来了,两条命令的结果一模一样,于是我追踪了sed的工作过程,如下
# ./sedsed -d --hide=hold -e '2,3d' -e '2,4d' test
PATT:111111$
COMM:2,3 d
PATT:111111$
COMM:2,4 d
PATT:111111$
111111
PATT:222222$
COMM:2,3 d
PATT:333333$
COMM:2,3 d
PATT:444444$
COMM:2,3 d
PATT:444444$
COMM:2,4 d
PATT:555555$
COMM:2,3 d
PATT:555555$
COMM:2,4 d
PATT:555555$
555555
PATT:666666$
COMM:2,3 d
PATT:666666$
COMM:2,4 d
PATT:666666$
666666
PATT:777777$
COMM:2,3 d
PATT:777777$
COMM:2,4 d
PATT:777777$
777777
PATT:888888$
COMM:2,3 d
PATT:888888$
COMM:2,4 d
PATT:888888$
888888
PATT:999999$
COMM:2,3 d
PATT:999999$
COMM:2,4 d
PATT:999999$
999999
再来
#
[root@song ~]# ./sedsed -d --hide=hold -e '2,3d' -e '2,3d' test
PATT:111111$
COMM:2,3 d
PATT:111111$
COMM:2,3 d
PATT:111111$
111111
PATT:222222$
COMM:2,3 d
PATT:333333$
COMM:2,3 d
PATT:444444$
COMM:2,3 d
PATT:444444$
COMM:2,3 d
PATT:555555$
COMM:2,3 d
PATT:555555$
COMM:2,3 d
PATT:555555$
555555
PATT:666666$
COMM:2,3 d
PATT:666666$
COMM:2,3 d
PATT:666666$
666666
PATT:777777$
COMM:2,3 d
PATT:777777$
COMM:2,3 d
PATT:777777$
777777
PATT:888888$
COMM:2,3 d
PATT:888888$
COMM:2,3 d
PATT:888888$
888888
PATT:999999$
COMM:2,3 d
PATT:999999$
COMM:2,3 d
PATT:999999$
999999
各位也看到了,执行过程和结果都是一样,可是我就不明白了,那个颜色一样的部分是相同的执行过程,没什么说的,都好理解,但是不同的就是那个橙色高亮的那部分,在使用-e '2,3d' -e '2,4d'的时候能删除第444444行我能理解,但是为什么-e '2,3d' -e '2,3d'也能对444444这行起作用?求大神解释下-e执行前后命令的原理,我觉得这题可能对于理解sed的模式空间执行命令的一个过程是个不错的范例,可惜自己不太懂,坐等大神解释~
后来和一些人讨论还发现了一个问题,如果上面的命令继续比如-e '2,3d' -e '2,3d' -e '2,3d'会发觉又多处理了一行,这个规律存在,但是我无法解释~~
|
|