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

sed入门教程系列之:sed实战练习

2017-02-14
肖邦

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

本系列文章目录:

sed实战练习

实例1:

删除文件每行的第二个字符。

$ sed -r 's/(.*)(.)$/\1/'

实例2:

删除文件每行的最后一个字符。

$ sed -r 's/(.*)(.)$/\1/'

实例3:

删除文件每行的倒数第2个单词。

$ sed -r 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)\
  ([^a-Z]*$)/\1\2\4\5/' /etc/passwd

实例4:

交换每行的第一个字符和第二个字符。

$ sed -r 's/(.)(.)(.*)/\2\1\3/' /etc/passwd

实例5:

交换每行的第一个单词和最后一个单词。

$ sed -r 's/([a-Z]+)([^a-Z]+)(.*)\
  ([^a-Z]+)([a-Z]+)([^a-Z]*$)/\5\2\3\4\1\6/'\
  /etc/passwd

实例6:

删除一个文件中所有的数字。

$ sed 's/[0-9]//g' /etc/passwd

实例7:

用制表符替换文件中出现的所有空格。

$ sed -r 's/ +/\t/g' /etc/passwd

实例8:

把所有大写字母用括号 () 括起来。

$ sed -r 's/([A-Z])/(\1)/g' /etc/passwd

实例9:

打印每行 3 次。

$ sed 'p;p' /etc/passwd

实例10:

隔行删除

$ sed '0~2{=;d}' /etc/passwd

实例11:

把文件从第 22 行到第 33 行复制到 56 行后面。

$ sed '22h;23,33H;56G' /etc/passwd

实例12:

把文件从第 22 行到第 33 行移动到第 56 行后面。

$ sed '22{h;d};23,33{H;d};56g' /etc/passwd

实例13:

只显示每行的第一个单词。

$ sed -r 's/([a-Z]+)([^a-Z]+)(.*)/\1/' /etc/passwd

实例14:

打印每行的第一个单词和第三个单词。

$ sed -r 's/([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)\
  ([a-Z]+)([^a-Z]+)(.*)/\1\t\5/' /etc/passwd

实例15:

将格式为 mm/yy/dd 的日期格式换成 mm;yy;dd

$ date '+%m/%y/%d' | sed 's/\//;/g'

Comments

Content