3.1 正则表达式基础
- 正则表达式:是由一串字符和元字符构成的字符串。
- 主要功能:文本查询和字符串操作。
-
元字符:*,^,[]等字符
### 常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的行首,或后面字符的非 |
$ | 匹配字符串的结束 |
* | 0个或多个在*字符之前的那个普通字符 |
[] | 匹配字符集合 |
^cloud #表示匹配以cloud开头的行
^$ #表示既匹配行首,又匹配行尾,即表示匹配空行
^.$ #匹配一个字符的行
[0123456789]
[0-9] #这两种都是匹配任意一个数字
[a-z] #匹配所有小写字母
[^b-d] #^在[]中不再表示匹配行首,而是表示取反。即匹配不在b-d之间的字符
\. #.经过转义,不再表示元字符,而表示一个普通的字符点号
\<the\> #精确匹配符号,精确匹配到the这个单词
\{n\} #表示匹配前面字符出现n次
\{n,\} #表示匹配前面字符至少出现n次
\{n,m\} #表示匹配前面字符出现n-m次
[a-z] \{5\} #精确匹配5个小写英文字母。
3.2正则表达式的拓展
### 拓展的正则表达式元字符
+ | 匹配一个或多个在其之前的那个普通字符 |
---|---|
? | 匹配一个或零个在其之前的那个普通字符 |
() | 表示一个字符集合或用在expr中 |
| | 表示或,匹配一组可选的字符 |
jo?b #匹配job或者joob
s+eu #注意:不能匹配到seu
re(a|e|o)d #read 或者 reed 或者 reod 等价于:re[aeo]d
3.3通配
- 通配:把包含通配符的非具体文件名存储在计算机上的一批具体文件名的过程 (查找文件名)
- 最常用的通配符包括正则表达式的元字符:但是意义不完全相同。在通配中,*表示任意位的任意字符,?表示一个任意字符,^不表示行首,而表示取反;{} 表示一组 表达式的集合
ls -l *.awk
ls -l 0?.pem
ls -l [a-h].awk
ls -l {[a-h]*.awk,0?.pem} #{}符号内的表达式是 或 的关系
3.4 grep 命令
- globle search regular expression and print out the line全面搜索正则表达式,并把行行打印出来
- grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
grep命令的基本用法:
grep 选项 模式 文件
-
参数如下:
-c:只输出匹配行的计数。
-i:不区分大小写。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
-r: 表示递归搜索
-w: 表示匹配整词,即以模式的字面含义去解析它
-x: 匹配整行,只有当文件中有整行内容与模式匹配时,grep才输出该行
-q: 不再输出任何结果,以退出状态表示搜索是否成功,为0表示搜索成功,1表示不成功,2表示命令未执行
-b: 打印匹配行距文件头部的偏移量,以字节为单位。
-o: 打印匹配词距文件头部的偏移量。
grep "user certificate" 00.pem
grep "user certificate" 00.pem 08.pem
上述两行可变为:
grep "user certificate" 0?.pem
grep -c certificate *.pem
grep -n certificate *.pem
ps:默认情况下,搜索单文件时,只显示每行的内容,搜索多文件时,显示文件名及每行的内容
grep -cv certificate *.pem
grep -i certificate *.pem
grep -h certificate *.pem
grep -l certificate *.pem
grep -s certificate *.pem #默认情况下,grep在待搜索文件不存在或搜索不到符合模式的文本行时将打印错误信息
grep -r certificate *.pem
grep -w cer* *.pem (匹配包括cer*的字符串)
grep cer* *.pem
grep -x "certificate" *.pem
grep -q "certificate" *.pem
echo $? #看看退出状态是多少
3.4.3 grep和正则表达式结合使用的一组例子
1.匹配行首
grep ^- *.pem #匹配.pem为后缀文件中以横杠-开头的行
2.搜索空白行
grep -c ^$ 00.pem
3.查找非空白行
grep -c ^[^$] 00.pem
4.转义
grep sec\.edu\.cn 00.pem
5.-使用(转义)
grep "\-\{5\}" 00.pem #第一个\不能够去掉
6.精确匹配
grep "\<the\>" re01