sed命令简单使用-D命令-结束本轮循环

来源:互联网 发布:西安淘宝设计代运营 编辑:程序博客网 时间:2024/05/01 19:14

为了验证D命令后的语句是否会执行,写了如下实例,(其中=表示输出当前行号,=;=表示输出当前行号两次):

[work@ test_sed]$  seq -f"%05g" 1 6 | sed -n ':a;N;p;=;D;N;p;=;=;ba'
00001
00002
2
00002
00003
3
00003
00004
4
00004
00005
5
00005
00006
6

可以发现行号并没有连续输出两次,所以语句执行到D后,后面的“N;p;=;=;ba”并没有执行,去掉上面命令中第一个N,执行如下:

  [work@ test_sed]$  seq -f"%05g" 1 6 | sed -n ':a;p;=;D;N;p;=;=;ba'
00001
1
00002
2
00003
3
00004
4
00005
5
00006
6
可以发现,语句执行到D后,后面的“N;p;=;=;ba”并没有执行,去掉前面命令中的D,执行如下:
[work@ test_sed]$  seq -f"%05g" 1 6 | sed -n ':a;N;p;=;N;p;=;=;ba' 
00001
00002
2
00001
00002
00003
3
3
00001
00002
00003
00004
4
00001
00002
00003
00004
00005
5
5
00001
00002
00003
00004
00005
00006
6

去掉D命令后,可以发现后面的“N;p;=;=;ba”执行了。所以,D命令将结束本轮sed语句,开始下一个循环。D命令后的语句将不再执行。另,d(Delete pattern space.  Start next cycle.)命令也是一样:

[work@ test_sed]$ seq -f"%05g" 1 6 | sed -n ':a;N;p;=;d;N;p;=;=;ba'
00001
00002
2
00003
00004
4
00005
00006
6