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;x
和 s/\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