日期:2014-05-16  浏览次数:20680 次

关于sed工作原理的一个问题
如:
cat test 输出如下:
1
2
3
4
5
6
7
为什么sed 'H;x' test 会得到如下这样的结果:

1
1
2
2
3
3
4
4
5
5
6
6
7

H在追加数据时是如何操作的?在追加数据到hold spance时,之前的hold spance是空的吗?

------解决方案--------------------
引用
在追加数据到hold spance时,之前的hold spance是空的吗?

只有第一次H之前是空的

你可以用sedsed看看执行过程
./sedsed -d 'H;x' urfile

http://sedsed.sourceforge.net/
------解决方案--------------------
默认的hold space 为 $
第一次执行H之后,$变成\n1$                #   \n为自动添加
x交换hold space和pattern space的内容,打印出
\n
1
第二次执行H之后,\n1$变成1\n2$ ,执行x之后,打印出
1\n
2
.
.
.
依次类推