• 本页内容

49. 循环和分支(b 命令和:label)


您可以使用 标签分支b 命令)更改 sed 命令的执行流程。

  • :label 定义标签。
  • b 标签将执行流程分支到标签。sed 跳转到由标签标记的行,并从那里继续执行其余命令。
  • 注意:您也可以只执行b命令(不带任何标签名称)。在这种情况下,sed 跳转到 sed 脚本文件的末尾。

以下示例将员工姓名和职务(来自 empnametitle.txt文件)合并到字段之间用 : 分隔的单行中,并且当该员工的职务包含关键字 "Manager" 时,还在员工姓名前面添加一个 *

$ vi label.sed
#!/bin/sed -nf
h;n;H;x
s/\n/:/
/Manager/!b end
s/^/*/
:end
p

在上面的示例中,您已经知道 h;n;H;xs/\n/:/ 的作用,正如我们在前面的示例中讨论的那样。

以下是该文件中与分支相关的行。

  • /Manager/!b end —— 如果这些行不包含关键字 "Manager",则转到名为 "end" 的标签。 请注意,标签的名称可以是您想要的任何名称。因此,这会执行 s/^/*/(在前面添加 * ),仅适用于 Manager
  • :end —— 这是标签。

执行上面的 label.sed 脚本:

$ chmod u+x label.sed

$ ./label.sed empnametitle.txt
John Doe:CEO
*Jason Smith:IT Manager
Raj Reddy:Sysadmin
Anand Ram:Developer
*Jane Miller:Sales Manager