Content #
分支(b)命令的格式如下:
[address]b [label]
address参数决定了哪些行会触发分支命令。label参数定义了要跳转到的位置。如果没有label参数,则跳过触发分支命令的行,继续处理余下的文本行。
下面这个例子使用了分支命令的address参数,但未指定label: $ cat data2.txt Header Line First Data Line Second Data Line End of Data Lines $ $ sed ‘{2,3b ; > s/Line/Replacement/} > ’ data2.txt Header Replacement First Data Line Second Data Line End of Data Replacements $ 分支命令在数据流中的第二行和第三行处跳过了两次替换命令。
如果不想跳到脚本末尾,可以定义label参数,指定分支命令要跳转到的位置。标签以冒号开始,最多可以有7个字符: :label2 要指定label,把它放在分支命令之后即可。有了标签,就可以使用其他命令处理匹配分支address的那些行。对于其他行,仍然沿用脚本中原先的命令处理: $ sed ‘{First/b jump1 ; > s/Line/Replacement > :jump1 > s/Line/Jump Replacement/} > ’ data2.txt Header Replacement First Data Jump Replacement Second Data Replacement End of Data Replacements $ 分支命令指定,如果文本行中出现了First,则程序应该跳到标签为jump1的脚本行。如果文本行不匹配分支address,则sed编辑器会继续执行脚本中的命令,包括分支标签jump1之后的命令。(因此,两个替换命令都会被应用于不匹配分支 address的行。)如果某行匹配分支address,那么sed编辑器就会跳转到带有分支标签jump1的那一行,因此只有最后一个替换命令会被执行。
From #
Linux命令行与shell脚本编程大全