内容:

AA
BC
AA
CB
CC
AA

 

结果:
AA YES
BC NO YES
AA YES
CB NO YES
CC NO YES
AA YES

sed '{/AA/b lable;s/$/ NO/;:lable;s/$/ YES/}' file
# 匹配到AA时,"b" 跳转去标签lable处,即执行:lable后面的命令 s/$/ YES/ (":"是申明标签)
# 继续匹配第二行,没有匹配到AA,那么执行 s/$/ NO/ 并且还会继续执行标签后的命令 s/$/ YES/


要想得到结果:
AA YES
BC NO
AA YES
CB NO
CC NO
AA YES

sed '/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/' file
# 匹配到行首是AA时,"b"跳转去标签a处,执行 s/$/ YES/
# 继续匹配第二行,没有匹配到AA,那么执行 s/$/ NO/ 后跳转到"",既执行到脚本末尾,则跳过了命令 s/$/ YES/

sed '/^AA/s/$/ YES/;t;s/$/ NO/' file
# 匹配到行首是AA的行成功,执行 s/$/ YES/ ,则"t"跳转到""即脚本末尾
# 匹配到行首是AA失败,则"t"不生效,继续执行后面的命令 s/$/ NO/


结果:
AA YES NO
BC
AA YES NO
CB
CC
AA YES NO

sed '/^AA/s/$/ YES/;T;s/$/ NO/' file
# T的作用和t刚好相反,前面匹配为假则跳去""即脚本结尾