我的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将删除第一条(空)线。每次重新启动循环时,保持空间将有效地加倍。因此,这应该导致无限循环。
我错过了什么?
答案 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