0%

sed lable(标签)

lable理解

类似编程语言中的goto,跳转到指定的地方执行

用法

: LABLE 定义一个lable; 例如 :a 定义了1个a标签

b LABLE 无条件跳转到指定LABEL,如果LABEL省略的话则进入下一行处理

t LABLE 只有s///执行成功才会跳转到LABEL定义的地方,如果LABLE省略则(除匹配到行外)执行最后一条命令

示例

测试文本

1
2
3
4
root@jpvps /tmp/test #cat test
hello
123
321

示例: 123开头的行,行尾加' True'; 其它行加 ' False'

1
2
3
4
root@jpvps /tmp/test #sed '/^123/s/$/ True/; t; s/$/ False/' test
hello False
123 True
321 False

示例: b后的LABEL省略,处理下一行

1
2
3
4
root@jpvps /tmp/test #sed '/^123/s/$/ True/; b; :x; s/$/ What/' test
hello
123 True
321

示例: bx, 跳转到 :x定义的地方, 数字1替换没有执行

1
2
3
4
root@jpvps /tmp/test #sed '/^123/s/$/ True/; bx; s/1/11/; :x; s/$/ What/' test
hello What
123 True What
321 What

示例: tx前面执行成功后跳转到:x定义的地方,所以123所在行没有执行数字1替换操作

1
2
3
4
root@jpvps /tmp/test #sed '/^123/s/$/ True/; tx; s/1/11/; :x; s/$/ What/' test
hello What
123 True What
3211 What