(一) 基本正则表达式
元数据 | 意义 | 范例 |
^word | 搜寻以word开头的行 | 例如,搜寻#开头的行 grep -n '\<#' /etc/passwd |
word$ | 搜寻以word结束的行 | 例如,搜寻以khy结束的行 grep -n 'kehuanyu\>' password 30:kehuanyu:x:1005:1004:柯环宇:/home/kehuanyu:/bin/bash |
. | 匹配任意一个@H_301_38@字符 | 例如:grep -n 'u.x@H_301_38@' password 30:kehuanyu:x@H_301_38@: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] | 匹配一个字符@H_301_38@范围中的字符 | 例如:匹配数字字符 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\>@H_301_38@@H_301_38@ | 匹配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 |
(二)通配符@H_301_38@
用*可以代替之后的所有字符。@H_301_38@
.匹配任何单个字符 @H_301_38@*匹配任意多个其前面出现的字符@H_301_38@^在行或者字符串的起始处匹配@H_301_38@$在行或者字符串的末尾处匹配@H_301_38@[…]匹配方括号内的任意字符@H_301_38@{n,m}匹配其前面出现的字符n到m次@H_301_38@+匹配前面正则表达式的一个或者多个实例@H_301_38@?匹配前面正面正则表达式的零个或者一个实例@H_301_38@|匹配|符号前后的正则表达式@H_301_38@( )匹配括号内部的正则表达式@H_301_38@[:alnum:]用于匹配数字字符@H_301_38@[:alpha:]用于匹配字母字符@H_301_38@[:blank:]用于匹配空格或者tab@H_301_38@[:cntrl:]用于匹配控制字符@H_301_38@[:digit:]用于匹配数字字符@H_301_38@[:graph:]用于匹配非空格字符@H_301_38@[:lower:]用于匹配小写字符@H_301_38@[:space:]用于匹配空白字符@H_301_38@[:upper:]用于匹配大写字母字符@H_301_38@[:xdigit:]用于匹配十六进制数字@H_301_38@
@H_301_38@
(三)运算符的优先级为(从高到低)
[..] [==] [::]用于排序的方括号符号@H_301_38@
[]方括号表达式@H_301_38@
() digit字表达式和后向引用@H_301_38@
* ? +前置字符重现的表达式@H_301_38@
^ $锚点@H_301_38@
@H_301_38@
(四)正则表达式举例
hello位于一行内的hello@H_301_38@
^hello位于字符串首部的hello@H_301_38@
hello$位于字符串尾部的hello@H_301_38@
^hello$本行或者字符串仅仅包含hello@H_301_38@
hel+o字符串中出现hello helllo hellllo等@H_301_38@
[Hh]ello字符串出现Hello或者hello@H_301_38@
he?llo字符串中出现hello或者hllo@H_301_38@
h.llo字符串中出现hello hallo等,h后要跟一个字符@H_301_38@
hel{2}o 字符串出现hello@H_301_38@
he(l)1o字符串中出现hello@H_301_38@
匹配正整数可以用^[1-9]d*$@H_301_38@
匹配负整数可以用^-[1-9]d*$@H_301_38@
匹配邮政编码可以用^[1-9]d{5}$@H_301_38@
匹配IP地址可以用d{1,3}.d{1,3}@H_301_38@