什么是正则表达式?
我理解的正则表达式就是用来匹配字符串的一种方法。通过一种规则去帮助用户更快捷的达到查找的目的。
对于系统管理员来说,正则表达式是非常重要的。因为在系统每天都会产生相当多的信息,比如系统的日志文件中记录了很多系统产生的相关信息,如果去查看那么多的信息是相关费时的,而正则表达式则可以用来查询我们需要的信息,过滤掉那些不需要的信息,从而方便我们处理。
正则表达式分为几种,常用的是:
Basic REGEXP: 基本正则表达式
Extended REGEXP:扩展正则表达式
字符集合表示方式:
[[:lower:]] | 所有的小写字母; |
[[:upper:]] | 所有的大写字母; |
[[:alpha:]] | 所有的字母; |
[[:digit:]] | 所有数字; |
[[:alnum:]] | 所有的字母和数字; |
[[:punct:]] | 所有的标点符号; |
[[:space:]] | 所有的空白字符; |
[^[:lower:]]: | 除了小写字母 |
grep:基本正则表达式
使用基本正则表达式定义的模式来过滤文本的命令,贪婪模式(尽可能长的去匹配)
部分匹配,显示整行
-i:忽略大小写
-o : 只显示被匹配的字符串
--color:把匹配到的高亮
可用 alias grep='grep --color' 设置grep别名
-v:显示没有匹配到的行
-n:在显示匹配文本的那一列之前标示出该列的是多少列
-E:使用扩展表达式
字符匹配:
. :匹配任意单个字符
[] : 匹配指定单个字符
[^] : 匹配指定范围外的单个字符
次数匹配:
* : 匹配其前面的字符任意次,可以0次
\? : 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符最少m次,最多n次
例如\{2\}匹配其前面的字符最少2次,最多无上限,无上限时n可省略
\{0,2\}匹配其前面的字符最少0次,最多2次,m不可省略
.* : 任意长度的任意字符
锚定:
^:其后面的字符锚定行首
$:其后面的字符锚定行尾
^PATTERN$ 用模式匹配整行
例^ab.*c$ 以ab开头中间有任意并以c结尾的行
^$ 匹配空白行
^[[:space:]]$ Tab键也算space 匹配完全空白行
\<:其后面的字符锚定单词首部 [ \b.*\b ==\<.*>\ 但 \> 不等于 \b ]
\>:其后面的字符锚定单词尾部
\(\) : 分组,例\(ab\) 用于反向引用 子表达式 \1,\2,\3….
在子表达式中(a.b).*\1 表示匹配第一个子表达式匹配到的字符
例 amb hello anb 不匹配
amb hello amb 匹配
eqrep:扩展正则表达式
字符匹配:(与grep一致)
. :匹配任意单个字符
[] : 匹配指定单个字符
[^] : 匹配指定范围外的单个字符
次数匹配:
* : 匹配其前面的字符任意次,可以0次
? : 匹配其前面的字符1次或0次(相比grep不用加\)
+ : 匹配其前面的字符至少1次(?+ = grep的*)
{m,n} :匹配其前面的字符最少m次,最多n次(相比grep不用加\)
锚定:
^:其后面的字符锚定行首
$:其后面的字符锚定行尾
\< :其后面的字符锚定单词首部
\> :其前面的字符锚定单词尾部
(): 分组, 用于反向引用 子表达式 \1,\2,\3….
|:或者,例 a|b 表示 a或者b
C|cat 表示 C或者cat
(C|c)at 表示 Cat或者cat