正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
元字符
正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,以下给出解释:
| 元字符 | 含义 |
|---|---|
| . | 匹配任意单个字符 |
| * | 匹配前一个字符出现0次或连续多次 |
| .* | 匹配任意长度 |
| ^ | 匹配以……开头 |
| $ | 匹配以……结尾 |
| ^$ | 匹配空行 |
| [ ] | 匹配指定范围内的单个或多个字符 |
| [^ ] | 匹配不包含括号里任意单个或一组字符 |
| ^[ ] | 匹配以括号内的单个或多个字符开头 |
| ^[^ ] | 匹配不以括号内的单个或多个字符开头 |
| \< | 匹配以……开头的行 |
| \> | 匹配以……结尾的行 |
| \<……\> | 匹配某一个单词的行 |
| \{n\} | 匹配前一个字符出现n次 |
| \{n,\} | 匹配前一个字符至少出现n次 |
| \{n,m\} | 匹配前一个字符至少出现n次,至多出现m次 |
| ^$ | 空行 |
grep
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep
linux使用GNU版本的grep。它功能更强,它也可以通过-E命令行选项来使用egrep功能
grep的常用参数
| 参数 | 说明 |
|---|---|
| -i | 不区分大小写 |
| -v | 过滤 |
| -n | 显示行号 |
| -w | 精确匹配单词 |
| -E | 可用扩展元字符 |
| -o | 把匹配到的字符按行打印出来 |
注意:‘a.’不代表只有2个字符,如果一行存在多个’a.'这样的形式它会一起匹配出来!
注意:1、a不一定是字符串的开头或者行的开头
2、第一个字符a是固定的,肯定会出现的,而第二个a可能没有或有多个,所以它把有a的行都匹配了
注意:字符a肯定会出现,后面跟1个到多个字符
注意:如果一行abc全有它直接过滤掉不会出现,如果只是有abc其中的一个字符它会显示但不会匹配,相当于过滤的意思了,把中括号里^字符后面的看成一个整体过滤掉显示出来
注意:^在中括号里表示不匹配,在中括号外表示以……开头
注意:<……>这个里面是精确匹配一个单词!而<和>不是,只是匹配开头结尾,等同于^和$的用法
注意:这里匹配的是a+几个a的倍数的行,而不是几次就是几次
扩展元字符
| 元字符 | 含义 |
|---|---|
| + | 匹配前一个字符1个或多个 |
| ? | 匹配0个或1个字符 |
| | | 或 |
| () | 匹配括号里的整体 |
| {n} | 前一个字符重复n次 |
| {n,} | 前一个字符至少重复n次 |
| {n,m} | 前一个字符出现n-m次 |
egrep
egrep命令只跟grep有很小不同。egrep是grep的扩展,支持更多的元字符
注意:竖线两边不能有空格