正则表达式基础介绍

正则表达式

正则表达式通过一些特殊符号的帮助,使用户可以轻松快捷的完成查找、删除、替换等处理程序

正则表达式特殊符号

1
2
3
4
5
6
7
8
9
10
11
12
[:alnum:]代表英文大小写字母及数字
[:alpha:]代表英文大小写字母
[:blank:]代表空格和 tab 键
[:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
[:digit:]代表数字
[:graph:]代表空白字符以外的其他
[:lower:]小写字母
[:print:]可以被打印出来的任何字符
[:punct:]代表标点符号
[:upper:]代表大写字符
[:space:]任何会产生空白的字符如空格,tab,CR 等
[:xdigit:]代表 16 进位的数字类型

利用grep查找文件中的小写字符

1
$ grep -n '[[:lower:]]' examples.txt

字符组匹配

[]中包含的任意一个字符,只能是一个 -表示一个自范围,要求前面字符的码位小于后面字符的码位 [^...]排除型字符组,表示排除后面的字符

例如:

1
2
3
4
5
[abc]           :表示“a”或“b”或“c”
[0-9] :表示 0~9 中任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5] :表示任意一个汉字
[^a1<] :表示除“a”、“1”、“<”外的其它任意一个字符
[^a-z] :表示除小写字母外的任意一个字符

任意一个字符.与重复字符*

.表示任意一个字符,一个小数点只能表示一个未知字符

1
$ grep -n 'wh.t' examples.txt

#表示重复前面0个或者多个字符

1
2
3
4
e*: 表示具有空字符或者一个以上 e 字符。
ee*,表示前面的第一个 e 字符必须存在。第二个 e 则可以是 0 个或者多个 e 字符。
eee*,表示前面两个 e 字符必须存在。第三个 e 则可以是 0 个或者多个 e 字符。
ee*e :表示前面的第一个与第三个 e 字符必须存在。第二个 e 则可以是 0 个或者多个 e 字符。
也可用+或者?来表示 +表示重复1个或者1个以上的前一个字符
1
$ grep 'go+d' examples.txt
等价于
1
$ grep 'goo#d' examples.txt
?表示重复0个或者1个以上前一个字符

限定连续字符范围{}

{}可限制一个范围区间内的重复字符数,必要时可能需要转义 查找连续的2-5个o

1
$ grep -n 'go\{2,5\}g' examples.txt

行首符^和行尾符$

1
'^[A-Z]' 表示以大写字母开头。

其他

|表示用或的方式找出数个字符串

()表示找出群组的字符串

搜索glad或者good这两个字符串

1
$ grep 'g(la|oo)d' examples.txt
### 多个重复群组判别 A(xyx)+C表示查找A开头C结尾,中间有若干个xyz的字符串

tips

grep常见参数

1
2
3
4
5
6
7
8
9
-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!