曲径通幽论坛

标题: 将前一行内容添加到下一行内容的后边 [打印本页]

作者: beyes    时间: 2012-2-4 10:25
标题: 将前一行内容添加到下一行内容的后边
下面例子演示了将前一行添加到下一行的后边。测试文本如下:
[beyes@beyes   sed]$ cat tmp.txt
#website
        groad.net
        baidu.com
        sina.com

#system
        linux
        unix
        windows

#Windows
        win7
        winXP
        winMe
运行输出:
[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 分别指代第一个括号正则和第二个括号正则。此后的文本处理,就按照上述的过程进行,最后的结果就如上面输出所呈现。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2