正则表达式
目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
-
正则表达式组成
-
元字符
含义:代表普通字符或特殊字符
\w:匹配任何字类字符(数字、字母、下划线)
\W: 匹配任何非字类字符(数字、字母、下划线)
\b:代表单词分隔
-
单个字符
特定字符
某个具体字符(grep '1' passwd)
范围内字符: [ ]
数字字符:[0-9],[259]
小写字符:[a-z]
大写字符:[A-Z]
任意字符
. 表示任意字符
反向字符:^
取反:[^0-9] , [^0] (‘^’一定要放倒中括号里边才行)
-
重复字符
* :0次或者多次匹配前面的字符
+ :1次或者多次匹配前面的字符(+不能直接用,需要加\来转义)
?:0次或1次匹配前面的字符(?不能直接用,需要加\来转义)
重复特定次数: {n,m} 代表重复n-m次
* :{0,1}
+ :{1,}
?: {0,1}
任意字符串的表示: .*
^r.*: 表示以r开头的任意字符串。
n.*x:表示n和x之间有任意个字符
n...x:表示n和x之间有3个任意字符
逻辑或: | (需要转义,前边加\)
过滤掉#开头的行和空行
grep -v '^$\|^#' nginx.conf(-v是取反的意思)
常用的正则匹配
1、 匹配4-10位的QQ号码
grep '^[0-9]\{4,10\}$' a.txt
2、 匹配15或者18位×××号(支持带X的)
分析,×××开始位不能为0,结尾包括x,中间部分是13位或16数字重复。(注意转义符号)grep '^[1-9]\([0-9]\{13\}\|[0-9]\{16\}\)[0-9xX]$' a.txt
3、 匹配密码(由数字、字母和下划线组成)
grep '^\w\+$' a.txt
-
边界字符
首字符^
尾字符$
^$:表示空行。