Sed分支 - 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

我们已经讨论了在前面的章节中的第一个命令。第三个命令定义一个标签循环。第四命令上前置的连字符( - ),如果该行包含字符串“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