Sed - 分支

  • 简述

    可以使用 t 命令创建分支。这t仅当先前的替换命令成功时,命令才会跳转到标签。让我们以与上一章相同的示例为例,但现在我们打印四个连字符而不是打印单个连字符(-)。下面的例子说明了t命令。
    
    [jerry]$ sed -n ' 
    h;n;H;x 
    s/\n/, / 
    :Loop 
    /Paulo/s/^/-/ 
    /----/!t Loop 
    p' books.txt 
    
    执行上述代码时,会产生如下结果。
    A Storm of Swords, George R. R. Martin 
    The Two Towers, J. R. R. Tolkien 
    ----The Alchemist, Paulo Coelho 
    The Fellowship of the Ring, J. R. R. Tolkien 
    ----The Pilgrimage, Paulo Coelho 
    A Game of Thrones, George R. R. Martin
    
    在上面的示例中,前两个命令是不言自明的。第三个命令定义一个标签Loop. 如果该行包含字符串 "Paulo" 和t命令重复该过程,直到行首出现四个连字符。
    为了提高可读性,每个 SED 命令都写在单独的行上。否则,我们可以编写一个单行 SED,如下所示:
    
    [jerry]$ sed -n 'h;n;H;x; s/\n/, /; :Loop;/Paulo/s/^/-/; /----/!t Loop; p' books.txt 
    
    执行上述代码时,会产生如下结果。
    A Storm of Swords, George R. R. Martin 
    The Two Towers, J. R. R. Tolkien 
    ----The Alchemist, Paulo Coelho 
    The Fellowship of the Ring, J. R. R. Tolkien 
    ----The Pilgrimage, Paulo Coelho 
    A Game of Thrones, George R. R. Martin