📅  最后修改于: 2020-10-16 06:13:14             🧑  作者: Mango
可以使用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