元字符
正则表达式是一种字符模式
例如
^[0-9]+$
^开头 $结尾 0-9表示这些字符 +号表示前面这些字符出现1次到多次,这就叫模式
匹配邮箱:[a-z0-9_]+@[a-z0-9]+.[a-z]+
.表示任意单个字符,所以需要\来转义
[0-9]{1,3} 就是0-9出现了1-3次
[0-9]可以使用[[:dight:]]
1、元字符
shell中也叫通配符
而正则中是由各种执行匹配模式操作的程序来解析,比如vi grep sed awk python
grep ‘abc*’ * 表示前面的字符也就是c出现0次到多次
<[tT]om>代表一个单词,前后不能有字母,可以有符号
分为两类:基本元字符和扩展元字符
基本元字符:
^ 行首定位符 ^love 这个字符就是要在行首,也可能是列
$ 行尾定位符 love$ 这个字符就是要在行尾
. 匹配单个字符 l..e
* 匹配前导符0到多次 ab*love
.* 任意多个字符 相当于查询所有 r.*t 就是rt中间不管啥都能匹配上
[] 匹配指定范围内的一个字符 [lL]ove
[-] 匹配指定范围内的一个字符 [a-z0-9]ove
[^] 匹配不在指定组内的一个字符 [^a-z0-9]ove 除了a-z0-9,全除去 正则里区分大小写
\ 转义元字符 love\. 转义放在元字符身上,它们将失去作用,回到原意
\< 词首定位符 \<love
\> 词尾定位符 love\>
\(..\) 匹配稍后使用的字符的标签 :%s/\(172.\)\(16.\)\(130.\)1/\1\2\35/ 后面这\1\2\3代表前面3个括号
x\{m\} 字符x重复出现m次
x\{m,\} 字符x重复出现m次以上
x\{m,n\} 字符x重复出现m到n次
扩展元字符 需要用egrep才能使用 * ? + {}都不是给自己活着的,都是给别人活着的
-
匹配一个或多个前导字符
? 匹配0个或1个前导字符
a|b 匹配a或b
() 组字符 (ov)+一起匹配就加() 把里面的看做整体
(…)(…)\1\2 标签匹配字符
/^$/ 空行
grep实战:
grep ‘^root’ /etc/passed /etc/shadow 后面可跟多个目录