正则表达式
1. 基础正则表达式
看下表:
元字符 | 作用 |
---|---|
* | 表示匹配*前面的字符0次或者任意多次 |
. | 表示匹配除了换行符之外的任意一个字符 |
^ | 定位行首,比如^fiona表示匹配以fiona开始的行 |
$ | 定位行尾,比如fiona$表示匹配以fiona结尾的行 |
[] | 表是匹配中括号里面的任意一个字符 |
[^] | 表示中括号里面的内容取反,也就是不包含中括号里面内容的字符 |
\ | 转义符 |
\{n\} | 匹配前面的内容刚好n次,不要看着这个表达式复杂,\是转义符 |
\{n,\} | 匹配前面的内容大于等于n次,与上面一样,\是转义符 |
\{n,m\} | 匹配前面的内容最少n次,最多m次 |
+ | 匹配前一个字符1次或多次,这是扩展正则,需要用egrep或者grep -E |
? | 匹配前一个字符0次或1次,这是扩展正则,需要用egrep或者grep -E |
| | 匹配两个或者多个分支选择,"a |
() | 括号内的内容看成一个整体,(abd)+,会匹配abd,abdabd,abdabdabd |
通过例子说明:
下面有一段文本:
服务器磁盘空间使用情况:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 3.0M 32G 1% /dev/shm
tmpfs 32G 325M 32G 2% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 84G 14G 70G 17% /
/dev/sda1 497M 176M 322M 36% /boot
/dev/mapper/vgdata01-lvdata 400G 32G 369G 8% /data
tmpfs 6.3G 12K 6.3G 1% /run/user/42
tmpfs 6.3G 0 6.3G 0% /run/user/1000
CPU使用情况:
avg-cpu: %user %nice %system %iowait %steal %idle
0.26 0.00 0.12 0.00 0.00 99.62
内存使用情况:
total used free shared buff/cache available
Mem: 62G 16G 26G 310M 19G 45G
Swap: 15G 24M 15G
- t*:这个表达式没有任何意义,这样会把所有内容匹配出来
- tt*:匹配包含t的行,无论多少个t都行
- t.p:表示匹配t和p中间有任意一个字符的行
- ^/:表示匹配以/开始的行:
- ^[a-zA-Z].*[0-9]$:表示匹配以字母开头,数字结尾的行
- ^$:表示匹配空白行,利用grep -v 我们可以去掉空白行
- 我们来写个匹配手机号的正则
1[3-8][0-9]\{9\} - 我们再来写个匹配IP地址的正则,这个就很麻烦了。
“^(([0-9].)|([0-9][0-9].)|(1[0-9][0-9].)|(2[0-4][0-9].)|(25[0-5].)){3}(([0-9])|([0-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))$”
"^(([0-9]\.)|([0-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-9])|([0-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))$"
无意义的工作,自己体会下