sed:H和D的行为

时间:2017-07-24 21:15:22

标签: sed

我的sed脚本是这样的:

# script.sed
1,3H
1,3g
3D

当我运行它时,我得到以下内容:

$ seq 5 | sed -f script.sed

1

1
2
4
5

然而,这对我来说似乎不对。在第3行,执行D命令后,模式空间

1
2
3

重新启动循环时,H应将保留空间设置为:

<empty_line>
1
2
3
1
2
3

然后,g应该将模式空间设置为相同的内容。然后D将删除第一条(空)线。每次重新启动循环时,保持空间将有效地加倍。因此,这应该导致无限循环。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

下面,我将展示如何解释预期的执行,将命令的结果显示为有序对,首先是模式空间,后面是保持空间:

1: H(1,\n1)  g(\n1,\n1)                                > \n1\n
2: H(2,\n1\n2) g(\n1\n2,\n1\n2)                        > \n1\n2\n
3: H(3,\n1\n2\n3) g(\n1\n2\n3,\n1\n2\n3) D(,\n1\n2\n3) >
4:                                                     > 4\n
5:                                                     > 5\n

如果我接受这种解释的输出并将其连接到带有-e选项的echo命令,我得到:

$ echo -e '\n1\n\n1\n2\n4\n5\n'

1

1
2
4
5