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

sed入门教程系列之:基本正则表达式

2017-01-10
肖邦

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

本系列文章目录:

基本正则表达式

关于正则表达式的内容挺多的,掌握好下文中提及的内容就能满足正常工作中的需要,如果是专门做正则编程的,可以去买本正则表达式的书籍来看好了。只有多动手多练习,才是学开发编程的最好姿势。

1、符号”.”

匹配任意一个字符,除了换行符。但是需要注意的是,在 sed 中不能匹配换行符,但是在 awk 中可以匹配换行符。类似 shell 通配符中的 ?,匹配一个任意字符。

2、符号”*“

* 表示前边字符有 0 个或多个。.* 表示任意一个字符有 0 个或多个,也就是能匹配任意的字符。类似 shell 通配符中的 * ,可以匹配任意字符。

3、符号”[]”

[] 中括号中可以包含表示字符集的表达式。使用方法大概有如下几种。

  • [a-z]:表示 a-z 字符中的一个,也就是小写字母。
  • [0-9]:表示 0-9 字符中的一个,也就是表示数字。
  • [A-Z]:表示大写字母。
  • [a-zA-Z]:表示字符集为小写字母或者大写字母。
  • [a-zA-Z0-9]:表示普通字符,包括大小写字母和数字。
  • [abc]:表示字符 a 或者字符 b 或者字符 c。
  • [^0-9]:表示非数字类型的字符,^ 表示取反意思,只能放在中括号的开始处才有意义。
  • [-cz]:表示字符 - 或者字符 c 或者字符 z,注意与 [c-z] 的区别,因为 - 符号没有放在 e 和 f 之间。

4、符号”^”

^ 表示行首的意思,也就是每一行的开始位置。在这里并不是上边字符范围中取反的意思,^ 符号只有在 [] 符号的开头处才能表示字符取反。

  • ^abc:表示以 abc 开头的字符串 abc。
  • ^abc.*:表示以 abc 开头的字符串 abcxxx。

5、符号”$”

  • $ 表示行尾的意思,也就是每一行的结尾位置,很好理解,和 ^ 正好相反。
  • world$:表示以 world 结尾的字符串 world,如果该行中间有 world 字符串是不符合匹配条件的。
  • ^$:表示空行。行首和行尾没有内容,可不就是空行嘛。

6、符号 “\“

\ 表示是转义字符,和其它语言中用到的转义字符意义基本上是一样的。其实简单理解,就是把元字符转义为普通字符,比如 \\ 表示普通符号 \,把普通字符转换为特殊意义符号,比如 \n 表示把普通字符 n 转义为换行符。

7、符号”{}”

{} 表示前边字符的数量范围,大概有三种用法,其实容易理解,看下边例子就知道了,但是必须注意要加上转义字符 \,否则不生效,表示为普通字符 {}

  • \{2\}:表示前边字符的重复次数是 2。
  • \{2,\}:表示前边字符的重复次数至少是 2,也就是大于等于 2。
  • \{2,9\}:表示前边字符的重复次数大于 2 但小于 9。

8、符号”\<”和”\>”

  • \< 表示匹配条件为词首的位置,理解上可以对比 ^ 行首。
  • \<hello 匹配结果为:”nihao 1hello 2hello3 hello4“;
  • hello\> 匹配结果为:”nihao 1hello 2hello3 hello4”,这种匹配方式用的不是太多,用到会用就好。

Comments

Content