2012年(4)
分类:
2012-11-19 11:16:52
[解析]
这个命令就是输出的奇数行,怎么来实现的呢?首先N的作用是读取下一行内容,追加到模式空间里,那sed是逐行执行的,这时候读取1,N把下一行追加到模式空间,那模式空间里的内容就变成了 1\n2 虽然是2行,但是这时候sed把2行看做中间有个换行符的一个整体内容,在模式空间里面。然后继续执行命令P,打印第一行内容。那么1就输出到了屏幕上,接着读取3,N追加4,P输出3,这样一直按这个顺序执行,输出了所有奇数行。这个命令是不是很巧妙?NO,还有一个漏洞。我们看看下面的语句。
[解析]
输出奇数行?5没有输出。是的,这是为什么呢?可以info sed看看N的解释“If there is no more input then 'sed' exits without processing any more commands.”,如果没有可以追加的内容,那么sed将不会处理后面的任何命令。当sed读到5的时候,已经没有下一行内容了,那么N将退出,也不再执行后面的P。所以5没有输出。怎么解决呢?在Tim大师的提点下,明白了。
[解析]
$!N就是N对最后一行不起作用,哈哈,搞定。