程序员肖邦的博客 享受编程和技术所带来的快乐

sed入门教程系列之:分支和测试

2017-02-11
肖邦

sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义。网上也有很多关于 sed 的教程,我也是以学以致用的心态来学习 sed 的常见的用法,并进行系统的总结,内容基本覆盖了 sed 的大部分的知识点。文中的内容比较简练,加以实际示例来帮助去理解 sed 的使用。

本系列文章目录:

分支和测试

分支命令用于无条件转移,测试命令用于有条件转移。

1、分支branch

  • 跳转的位置与标签相关联。
  • 如果有标签则跳转到标签所在的后面行继续执行。
  • 如果没有标签则跳转到脚本的结尾处。
  • 标签:以冒号开始后接标签名,不要在标签名前后使用空格。

2、跳转到标签指定位置

测试文件:

$ grep seker /etc/passwd
seker:x:500:500::/home/seker:/bin/bash

例子1:

$ grep seker /etc/passwd | \
  sed ':top;s/seker/blues/;/seker/b top;s/5/555/'
# 结果:blues:x:55500:500::/home/blues:/bin/bash

例子2:

# 选择执行
$ grep 'seker' /etc/passwd | \
  sed 's/seker/blues/;/seker/b end;s/5/555/;:end;s/5/666/'
#结果:blues:x:66600:500::/home/seker:/bin/bash

例子3:

# 测试命令,如果前一个替换命令执行成功则跳转到脚本末尾(case结构)
$ grep 'seker' /etc/passwd | \
  sed 's/seker/ABC;t;s/home/DEF/;t;s/bash/XYZ/'
# 结果:ABC:x:500:500::/home/seker:/bin/bash

例子4:

$ grep 'zorro' /etc/passwd | \
  sed 's/seker/ABC/;t;s/home/DEF/;t;s/bash/XYZ'
# 结果:zorro:x:500:500::/DEF/zorro:/bin/bash

例子5:

# 与标签关联,跳转到标签位置。
$ grep 'seker' /etc/passwd | \
  sed 's/seker/ABC/;t end;s/home/DEF/;t;end;s/bash/XYZ'
# 结果:ABC:x:500:500::/home/seker:/bin/XYZ

Comments

Content