Chinaunix

标题: sed 的问题,为什么会输出两个空行? [打印本页]

作者: borefo    时间: 2010-07-26 10:08
标题: sed 的问题,为什么会输出两个空行?
  1. 11111111111111
  2. 22222222222222
  3. test33333333333333
  4. 44444444444444
  5. 5555555555555
复制代码
执行下面命令后为什么会输出两行空行?
  1. linux-svy2:# sed '/test/{x;p;}' foo
  2. 11111111111111
  3. 22222222222222


  4. 44444444444444
  5. 5555555555555
复制代码

作者: waker    时间: 2010-07-26 10:20
你x进来一个空行,显示打印一次,缺省打印一次 1+1=2
作者: bbgg1983    时间: 2010-07-26 10:30
他说的对,sed默认会把文本里面的行挨个打一遍,然后你又p了一次,所以空格的那行就打了两次
作者: wild_li    时间: 2010-07-26 10:33
路过,,不想要两行的话直接把后面p拿掉就行了
作者: expert1    时间: 2010-07-26 10:55

作者: borefo    时间: 2010-07-26 16:09
回复 2# waker


照这样说,sed '/test/{x;p;x;}' foo 也应该打印两个空行,为什么这个只打印了一个空行呢?
作者: Shell_HAT    时间: 2010-07-26 16:14
回复 6# borefo


第二次x的时候,test33333333333333被从holding buffer复制回pattern space,所以不会有两个空行。
作者: borefo    时间: 2010-07-26 16:19
回复 7# Shell_HAT


    哦,明白了

再请教一个问题:test33333333333333是在交换后立即打印,还是重新执行sed时才打印的呢?
作者: Shell_HAT    时间: 2010-07-26 16:21
回复 8# borefo


第二次x交换回来之后,sed命令走到了结尾的},打印模式空间的内容。然后sed再读下一行......




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2