(一) 基本正则表达式
元数据 | 意义 | 范例 |
^word | 搜寻以word开头的行 | 例如,搜寻#开头的行 grep -n '\<#' /etc/passwd |
word$ | 搜寻以word结束的行 | 例如,搜寻以khy结束的行 grep -n 'kehuanyu\>' password 30:kehuanyu:x:1005:1004:柯环宇:/home/kehuanyu:/bin/bash |
. | 匹配任意一个字符 | 例如:grep -n 'u.x' password 30:kehuanyu:x:1005:1004:柯环宇:/home/kehuanyu:/bin/bash 中间的.可以匹配任意一个字符,但是不能为空 |
\ | 转义字符 | 例如:搜寻的 " 是一个特殊字符,在正则表示中有特殊含义,必须先转 grep -n \" password_bak 显示72:"kehuanyu" |
* | 前面的字符重复0到多次 | 例如匹配good,god,gd grep 'g*d' test |
[list] | 匹配一系列字符中的一个 |
例如:查找zhang姓 用户 $ grep 'zhang[byj]' password_bak 显示如下: zhangyapin:x:1006:1004:张XXX:/home/zhangyapin:/bin/bash zhangbo:x:1007:1004:张XX:/home/zhangbo:/bin/bash zhangjun:x:1026:1026::/home/zhangjun:/bin/bash |
[^list] | 匹配字符集以外的字符 | 例如:grep 'zhang[^yxja]' password_bak 过滤掉含有zhang 但是后面不包含y,x,j,a字符的行 zhangben:x:1007:1004:张XX:/home/zhangben:/bin/bash zhangzhjia:x:1033:1006:张XX:/home/zhangzhjia:/bin/bash zhangpin:x:1034:1006:张XX:/home/zhangpin:/bin/bash |
[n1-n2] | 匹配一个字符范围中的字符 | 例如:匹配数字字符 grep '[0-9]' password |
\{n1,n2\} | 重复前面的字符n1,n2次 | 匹配字符koo,kooo,koooo,kooooo grep 'ko\{2,5\}' password_bak koo kooo koooo kooooo |
\<word | 匹配word开头的单词 | 例如:grep '\<kehuanyu' password_bak kehuanyu:x:1005:1004:柯环宇:/home/kehuanyu:/bin/bash |
word\> | 匹配word结尾的单词 | 例如:grep 'kehuanyu\>' password_bak kehuanyu:x:1005:1004:柯环宇:/home/kehuanyu:/bin/bash |
+ | 重复前面的字符一次到多次 | 例如:匹配rot,root,... grep -nE 'ro+t' password_bak 显示如下: 1:root:x:0:0:root:/root:/bin/bash 78:rot |
? | 匹配0或一次前面的字符 | 例如匹配:kt,ket,kett grep -nE 'ke?t' password_bak 显示如下: 80:kt 81:ket 82:kett 84:kt |
| | 或的方式匹配多个字串 | 例如: grep -nE 'kehuanyu|zhang' password 过滤含有kehuanyu或者zhang字串的行 |
() | 匹配括号内的字符串 | 例如:grep -nE 'zhang(bo|an)' password_bak 显示如下: 32:zhangbo:x:1007:1004:张x:/home/zhangbo:/bin/bash 63:zhanganli:x:1038:1006:张xx:/home/zhanganlong:/bin/bash |
(二)通配符
用*可以代替之后的所有字符。
.匹配任何单个字符*匹配任意多个其前面出现的字符^在行或者字符串的起始处匹配$在行或者字符串的末尾处匹配[…]匹配方括号内的任意字符{n,m}匹配其前面出现的字符n到m次+匹配前面正则表达式的一个或者多个实例?匹配前面正面正则表达式的零个或者一个实例|匹配|符号前后的正则表达式( )匹配括号内部的正则表达式[:alnum:]用于匹配数字字符[:alpha:]用于匹配字母字符[:blank:]用于匹配空格或者tab[:cntrl:]用于匹配控制字符[:digit:]用于匹配数字字符[:graph:]用于匹配非空格字符[:lower:]用于匹配小写字符[:print:]用于匹配可显示的字符[:punct:]用于匹配标点符号[:space:]用于匹配空白字符[:upper:]用于匹配大写字母字符[:xdigit:]用于匹配十六进制数字
(三)运算符的优先级为(从高到低)
[..] [==] [::]用于排序的方括号符号
Metacharacter转义字符
[]方括号表达式
() digit字表达式和后向引用
* ? +前置字符重现的表达式
^ $锚点
(四)正则表达式举例
hello位于一行内的hello
^hello位于字符串首部的hello
hello$位于字符串尾部的hello
^hello$本行或者字符串仅仅包含hello
hel+o字符串中出现hello helllo hellllo等
[Hh]ello字符串出现Hello或者hello
he?llo字符串中出现hello或者hllo
h.llo字符串中出现hello hallo等,h后要跟一个字符
hel{2}o 字符串出现hello
he(l)1o字符串中出现hello
匹配正整数可以用^[1-9]d*$
匹配负整数可以用^-[1-9]d*$
匹配邮政编码可以用^[1-9]d{5}$
匹配IP地址可以用d{1,3}.d{1,3}