sed进阶之改变执行流程

19 篇文章 0 订阅

shell脚本编程系列


分支b

通常,sed编辑器会从脚本的顶部开始,一直执行到脚本的结尾(D命令是一个例外,它会强制sed编辑器在不读取新行的情况下返回到脚本的顶部)。sed编辑器提供了一种方法,可以改变脚本的执行流程,称为分支。该方法可以基于地址、地址模式或地址区间排除一整段命令。允许只对数据流中的特定行执行部分命令。分支(b)命令的格式为:

[address]b [label]

address参数决定了哪些行会触发分支命令,label参数定义了要跳转的位置,如果没有label参数,则跳过触发分支命令的行,继续处理余下的文本行。
指定address参数,但不指定label参数

sed '{2,3b;s/Line/Replacement/}' data2.txt

跳过2,3行 不执行替换命令,分支命令在数据流中的第二行和第三行处跳过了两次替换命令。
在这里插入图片描述
定义label参数,指定分支要跳转到的位置,标签以冒号开始,最多可以有7个字符,比如:label2

sed '{/First/b jump1;s/Line/Replacement/;:jump1;s/Line/Jump Replacement/}' data2.txt

如果某行匹配分支address(包含First单词),那么sed编辑器就会跳转到带有分支标签jump1的那一行,执行后面的命令,而其他行,则沿用脚本中原有的命令处理。
在这里插入图片描述
除了可以跳转到sed脚本下方的标签,也可以跳转到靠前的标签,达到循环的效果

[root@192 Chapter21-Scripts]# echo "This , is , a, test, to, remove, commas." |
> sed -n {'
> :start
> s/,//1p
> /,/b start
> }'
This  is , a, test, to, remove, commas.
This  is  a, test, to, remove, commas.
This  is  a test, to, remove, commas.
This  is  a test to, remove, commas.
This  is  a test to remove, commas.
This  is  a test to remove commas.

在这里插入图片描述

测试t

与分支命令类似,测试(t)命令也可以改变sed编辑器脚本的执行流程。测试命令会根据先前替换命令的结果跳转到某个label处,而不是根据address进行跳转。如果替换命令成功匹配并完成了替换,测试命令就会跳转到指定的标签,如果替换命令未能匹配指定的模式,测试命令就不会跳转。
测试命令的格式和分支命令相同:[address]t [label],在没有指定label的情况下,如果测试成功,sed会跳转到脚本结尾。
在这里插入图片描述

echo "This , is , a, test, to, remove, commas." |
> sed -n '{
> :start
> s/,//1p
> t start
> }'

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lang20150928

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值