[beyes@beyes sed]$ sed 'H;x;s/^\(.*\)\n\(.*\)/\2\1/' tmp.txt
#website
groad.net#website
baidu.com groad.net
sina.com baidu.com
sina.com
#system
linux#system
unix linux
windows unix
windows
#Windows
win7#Windows
winXP win7
winMe winXP
说明:
首先第 1 行内容会被读到 pattern space 中,然后用 H 命令将该行内容追加到 hold space 中,此时 hold space 中的内容为:"(空行)\n#website" ,注意 pattern space 中内容不会被移除!接着,x 命令将 pattern space 和 hold space 进行互换,结果是 hold space 中存放了第 1 行内容,即 #website ,对于 x 命令后面的正则表达式,因为不匹配 pattern space 中的内容,故而不产生什么作用。在第 2 次处理循环中,同样,先读入第 2 行内容到 pattern space,然后将其追加到 hold space 中,结果 hold space 中的内容变为:"#website\ngroad.net" ,当再用 x 将该内容交换到 pattern space 中时,正则表达式发生匹配,该正则表达式的结果是将第 1 行和第 2 行的前后位置进行互换,其中 \2 和 \1 分别指代第一个括号正则和第二个括号正则。此后的文本处理,就按照上述的过程进行,最后的结果就如上面输出所呈现。