正则表达式-基础笔记【Unix&Linux大学教程】

关于正则表达式

基本元字符

  • .  除新行字符外,匹配任意的单个字符
  • ^ 匹配行的开头
  • $ 匹配行的末尾
  • \< 匹配单词的开头
  • \> 匹配单词结尾
  • [list] 匹配list中的任意字符
  • [^list] 匹配不在list中的任意服务
  • ( ) 组,视为一个独立的单元
  • | 交变,匹配选择之一
  • \ 引用,从字面上解释元字符

关于运算符

  • * 匹配0次或多次
  • + 匹配1次或多次
  • ? 匹配0次或1次
  • {n} 限定符,匹配n次
  • {n,} 限定符,最少匹配n次
  • {0,m} 限定符,最多匹配m次
  • {,m} 限定符,最多匹配m次
  • {m,n} 限定符,最少匹配n次,最多匹配m次

类运算符

  • [:lower:] 小写字母,类似于 a-z
  • [:upper:] 大写字母,类似于 A-Z
  • [:alpha:]  大小写字母,类似于 A-Za-z
  • [:alnum:] 大小字母、数字 A-Za-z0-9
  • [:digit:] 数字
  • [:punct:] 标点符号
  • [:black:] 空白符或制表符

关于基本和扩展正则表达式

  1. Unix支持两种主要的正则表达式变体:扩展正则表达式(现代版本),基本正则表达式(以前的废气版本)
  2. 基本正则表达式BRE,功能较弱,而且语法容易混淆

关于匹配行和单词

  1. 假设有一个文件data,如果你需要使用grep 查看所有包含有”hello”的行,使用命令如下

grep hello data

  1. 行开头

grep ‘^hello’ data

  1. 行结尾

grep ‘hello$’ data

  1. 整行只有一个单词

grep ‘^hello$’ data

  1. 空行数量统计

grep ‘^&’ data | wc –l

  1. 显示单词以 he 开头的行

grep ‘\<he’ data

  1. 显示单词以 llo结尾的行

grep ‘llo\>’ data

关于匹配字符:字符类

  1. 查找包括所有包含下述的行:字符串 he后面跟两个任意字符,在后面跟一个o字符

grep ‘he..o’ data

  1. 为了在文字data中搜索所有包含字母h , 后面跟 a 或者 A 的行

grep ‘h[aA]’ data

另外另个例子

grep ‘\<li[cs]en[cs]\>’ data

预定义字符类:范围

  1. 查找文件data中包含数字21,后面跟一个小写字母或者大写字母的所有行

grep ‘21[[:alpha:]]’ data

另一个例子,包含另个连续的大写字母,后面跟着一个数字,再跟一个小写字母的所有行

grep ‘[[:upper:]][[:upper:]][[:digit:]][[:lower:]]’ data

  1. 为了搜索文件data中所有包含数字3至7的行

grep ‘[3-7]’ data

另外一个例子,为了搜索文件data中所有,X后面不跟着a或o的行

grep ‘X[^ao]’ data

搜索所有包含至少一个非字母字符的行

grep ‘[^[:alpha:]]’

重复运算符

  1. H后面,跟着0个或者多个小写字母的行

grep ‘H[a-z]*’ data

grep ‘[[:lower:]]*’data

  1. 搜索版行一个吗好,后面跟0个或者多个其他任意字符,后面在跟一个冒号的行

grep ‘:.*:’ data

其他例子

grep ‘a[0-9]+’ data

grep ‘colou?r’ data

grep ‘\<[0-9]{3,5}’ data

1 thought on “正则表达式-基础笔记【Unix&Linux大学教程】

Comments are closed.