17、深入探索 sed 高级命令:流控制与多模式匹配

深入探索 sed 高级命令:流控制与多模式匹配

1. 高级流控制命令概述

在 sed 脚本中,正常的流控制有时需要根据特定条件进行调整。分支(b)和测试(t)命令可以帮助我们实现这一目的。这两个命令能将脚本的控制权转移到包含指定标签的行,如果未指定标签,则控制权会转移到脚本末尾。分支命令(b)是无条件转移,而测试命令(t)是条件转移,只有当替换命令改变了当前行时才会发生。

标签是由最多七个字符组成的序列(POSIX 标准允许实现自行决定是否支持更长的标签,GNU sed 支持任意长度的标签),标签行以冒号开头,且冒号和标签之间不能有空格,行尾的空格会被视为标签的一部分。在分支或测试命令中指定标签时,命令和标签之间可以有空格,但标签后面不能有空格。例如:

:mylabel
b mylabel
2. 分支命令(b)的使用

分支命令的语法为 [address]b[label] ,标签是可选的。若未提供标签,控制权将转移到脚本末尾;若提供了标签,执行将从标签所在行的下一行继续。

2.1 跳过特定行的修改

在排版脚本中,如果想避免对某些行进行修改,可以使用分支命令跳过脚本的相应部分。例如,对于由 .ES .EE 宏标记的计算机生成示例内的文本不应修改,脚本可以写成:

/^\.ES/,/^\.EE/b
s/^"/``/
s/"$/''/
s/"?/''?/g
...
s/\\(em\\^"/\\(em``/g
s/"\\(em/''\\(em/g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值