除了用b外还可以用t, N, q, d作为退出的命令,用式样或行号作为退出的条件。当前面有成功的替换时,可用`t‘转移动脚本中的任意位置——当然也可以跳出循环体。在最后一行使用N会退出脚本,利用这一点我们可以退出循环体。不过不同版本的sed在最后一行使用`N‘时的结果不同——有的会显示ps的内容,有的则不会。`q‘命令用来退出脚本,当然也就不会再循环了。`d‘和`D‘命令的副作用是强制脚本进入下cycle,这使得我们可以用这两个命令来形成行与行之间的循环,如果下一循环中不满足循环的进入条件则循环中止——所以这两个命令既是进行循环的命令也是退出的命令。当然这些行前面都可以使用式样或行号作为运行命令的条件。
如果中间的语句没有对/regexp/修改则结果类似:
:a
...
ba
例:要将输入中#号后的所有xxx删除。
输入:
abc#efxxxghxxxxijxxx
输出:
abc#efghxij
sed ':a
s/\(#.*\)xxx/\1/ # 修改了循环标志
/#.*xxx/ba'
当然这时t可以派上用场了:
sed ':a; s/\(#.*\)xxx/\1/; ta'
下面是一些实例:
echo -e "abc\nefg" | sed ':a;/re/b;ba'
echo -e "abc\nefg" | sed ':a;/re/!b;ba'
echo -e "abc\nefg" | sed ':a;s/re/&/;t;ba'
echo -e "abc\nefg" | gsed ':a;s/re/&/;T;ba'
用以控制循环:
echo -e "abc\nefg" | sed ':a;/re/ba'
echo -e "abc\nefg" | sed ':a;/re/!ba'
echo -e "abc\nefg" | sed ':a;s/re/&/;ta'
echo -e "abc\nefg" | sed ':a;s/re/&/;Ta'
echo -e "abc\nefg" | sed '/re/b; :'