正则表达式和扩展正则表达式
正则表达式的意义
linux运维工作中,面临大量字符串内容,如
注意,linux通配符和正则表达式是两个东西不一样的
linux 的通配符,例如 * ?
这种 是 通配符,正则是另一个符号
linux 三剑客
工具 |
|
grep |
文本过滤器 |
sed |
流编辑器 ,stream editor, ,文本编辑工具 |
awk |
文本报告生成器,linux上是gawk |
基础正则表达式
linux 自带的通配符
通配符 |
解释 |
* |
匹配任意0-n个字符 |
? |
匹配任意1 个字符 |
符号集合 |
匹配一堆字符或者文本 |
[abcd] |
匹配[abcd]任意一个字符 |
[!abcd] 或者 [!a-d] |
不匹配括号里面的任意一个字符 |
[^a-d] |
同上 ^和 ! 等价 |
[[:upper:]] |
所有大写字母 |
[[:lower:]] |
小写字母 |
[[:alpha:]] |
所有字母 |
[[:space:]] |
所有空白字符 |
1
2
|
find ./ -name "[a-z]*"
# 通配符的使用方法
|
三剑客提供的正则表达式符号
符号 |
作用 |
^ |
表示开头 |
$ |
表示结尾 |
^$ |
组合符号,表示空行 |
. |
匹配任意一个字符, 对应通配符中的 ? |
\ |
转义字符,让特殊字符还原本意 |
* |
匹配前一个字符,连续出现 0和1次以上,重复0次代表空,即匹配任意次 |
.* |
组合符,表示匹配所有内容 |
^.* |
组合符号,表示匹配任意多个字符开头的内容 |
.*$ |
组合符号,匹配任意多个字符结尾的内容 |
[abc] |
和通配符的用法一样,表示集合内的任意一个字符 |
[^abc] |
匹配除了 ^后面的任意字符,a或者bc |
扩展正则表达式 ERE 集合
字符 |
作用 |
+ |
匹配前一个字符1次或多次, * 和 + 的区别是,* 包括了 0次 |
[:/]+ |
匹配括号内的 “:”或者 “/” 字符一次或多次 |
? |
匹配前一个字符 0次胡总1次 |
| |
表示或者,同时过滤多个字符,例如 a|b |
() |
分组过滤,括起来的是一个整体 |
a{n,m} |
匹配前一个字符最少n次,最多m次 |
a{n,} |
匹配前一个字符最少n次 |
a{n} |
匹配前一个字符正好n次 |
a{,m} |
匹配a最多m次 |
正则表达式的应用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
grep -n -i "root" /etc/passwd
# 忽略大大小写查找 root
cat -n temp | grep -E "^.*$" -n
# 高亮匹配
# 查看 grep的别名
alias
# 我们可以看到他自带 --color=auto
# 查找空行
cat temp | grep -E "^$" -n
grep -E "^$" temp -n
# 或者直接用 grep
# 查找不是空行的参数
grep -E "^$" temp -n -v
|
查找注释行
1
2
3
|
lyr@DESKTOP-FSVN6C0:~/tmp$ grep '^$' app.py -v | grep '^#.*$'
# hello world
# abc dddd
|
全匹配
1
2
3
|
grep -n ".*" /etc/passwd
# . 表示任意字符,所有直接匹配每一行所有内容
grep "[a-z0-9]" /etc/passwd
|
扩展表达式的使用
1
|
grep -E "ch+" /etc/passwd
|