流编辑器 - 分支



可以使用 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
广告