linux下正则表达式学习
来源:互联网 发布:软件开发规章制度 编辑:程序博客网 时间:2024/05/21 21:49
符号
意义
*
0个或多个在*字符之前的那个普通字符
.
匹配任意字符
^
匹配行首,或后面字符的非
$
匹配行尾
[]
匹配字符集合
\
转义符,屏蔽一个元字符的特殊意义
\<\>
精确匹配符号
\{n\}
匹配前面字符出现n次 P.43
\{n,\}
匹配前面字符至少出现n次
\{n,m\}
匹配前面字符出现n~m次
其本使用方式: 查看包含sd字符的..
[fanxb]$ grep -E 'sd' regular.log
sdfdssd
sdksks sdksleis
23423490 ssdlasdw
92323sdksel lsllll99899
++~sdkd ^sdklsdl
*号:前面的表达式有有0个或多个。。
[fanxb]$ cat -n r1.log
1 accccb
2 aeeeeeeeeeeeeb
3 abeeeeeeeeee
4 aeb
5 a1b
6 aaaaab
7 abbbbbb
8 a*b
9 a+b
10 cccccccccb
11 eeeb
12 ssllls
注意, 这里不是表示a 和 b 之间有多个, 而是表示*号前面的a可以有0或者多个
所以ccccccb, eeeb这样的行也是可以出来的。
注意这和linux 通配符的区别。
[fanxb]$grep-En 'a*b' r1.log
1:accccb
2:aeeeeeeeeeeeeb
3:abeeeeeeeeee
4:aeb
5:a1b
6:aaaaab
7:abbbbbb
8:a*b
9:a+b
10:cccccccccb
11:eeeb
使用 + 号, 就表示a一定要1个或者多个, 所以ccccccb和eeeb不会出来了。
[fanxb]$ grep -En 'a+b' r1.log
abeeeeeeeeee
aaaaab
abbbbbb
如果我要匹配的不是单个字符, 而是一个字符串怎么办呢.
使用( ) 符号
[fanxb]$cat -nr2.log
1 abcabcabcabcdsklslls
2 adcsssabc111abc111
3 abc1abc2abc3abc4abc5abc6abc7abc8
4 abc1abc2abc3abc4abc5
5 abc1abc2abc3abc4abc5abc6abc7
6 abc1abc2abc3abc4abc5abc6abc7abc8abc9abc11
7
8 abc1abc2
9 abc1abc2abc3
10 ab c a bc a
使用(abc)*,表示匹配0或者多个 ‘abc’, 所以所有的行都出来了, 包括空行
[fanxb]$grep-En '(abc)*' r2.log
1:abcabcabcabcdsklslls
2:adcsssabc111abc111
3:abc1abc2abc3abc4abc5abc6abc7abc8
4:abc1abc2abc3abc4abc5
5:abc1abc2abc3abc4abc5abc6abc7
6:abc1abc2abc3abc4abc5abc6abc7abc8abc9abc11
7:
8:abc1abc2
9:abc1abc2abc3
10:ab c a bc a
使用加号就不一样了, 比如是1次或者多次
[fanxb]$grep-En '(abc)+' r2.log
1:abcabcabcabcdsklslls
2:adcsssabc111abc111
3:abc1abc2abc3abc4abc5abc6abc7abc8
4:abc1abc2abc3abc4abc5
5:abc1abc2abc3abc4abc5abc6abc7
6:abc1abc2abc3abc4abc5abc6abc7abc8abc9abc11
8:abc1abc2
9:abc1abc2abc3
?问号呢, 表示0次或者1次,, 如果这里使用的话, 当然所有行都要出来。
如果说我们想指定具体的次数呢 , 那么使用方括号 { }
注意使用{ } 是表示前面表达式的连续次数, 所以abc1abc2abc3的没有出来
返回连续3个 abc的行, (因为只要满足连续3个abc, 就返回,所以 4,5,6,7的也返回了,并不是大于3个的意思)
[fanxb]$morer3.log
abc 1
abcabc 2
abcabcabc 3
abcabcabcabc 4
abcabcabcabcabc5
abcabcabcabcabcabc6
abcabcabcabcabcabcabc7
abc1abc2abc3
[fanxb]$grep-En '(abc){3}' r3.log
3:abcabcabc 3
4:abcabcabcabc4
5:abcabcabcabcabc5
6:abcabcabcabcabcabc6
7:abcabcabcabcabcabcabc7
返回连续3到5个abc的行,, 这还是返回所有行, 看来没什么具体用啊。
[fanxb]$grep-En '(abc){3,5}' r3.log
3:abcabcabc 3
4:abcabcabcabc4
5:abcabcabcabcabc5
6:abcabcabcabcabcabc6
7:abcabcabcabcabcabcabc7
返回连续3个abc及以上的, 还是一个样..3,4,5,6,7都出来了。
[fanxb]$grep-En '(abc){3,}' r3.log
3:abcabcabc 3
4:abcabcabcabc4
5:abcabcabcabcabc5
6:abcabcabcabcabcabc6
7:abcabcabcabcabcabcabc7
^ 和 $ 符号
如果要查找以什么开头的呢:
[fanxb]$cat -nr4.log
1 ab c d
2 ba c e
3 ef d h
以a开头的…
[fanxb]$grep-En '^a' r4.log
1:a b c d
以b结尾的
[fanxb]$grep-En 'e$' r4.log
2:b a c e
方括号:
方括号表示匹配其中任意的字符串:
[fanxb]$cat -nr5.log
1 asdkweols
2 blsiels
3 cdkdieos
4 edieowls
5 fieoslsi
6 1die
7 2lsiels
8 3lsiels
9 4eisol
匹配以abce开头的..
[fanxb]$grep-En '^[abce]' r5.log
1:asdkweols
2:blsiels
3:cdkdieos
4:edieowls
也可以使用 ~ 符号.
[fanxb]$grep-En '^[a~c]' r5.log
1:asdkweols
3:cdkdieos
查看以数字开头的,,使用2到4开头
[fanxb]$grep-En '^[2~4]' r5.log
7:2lsiels
9:4eisol
也可以使用 | 符号, 表示或者,, 下面的例子表示以a和1开头的..
[fanxb]$grep-En '^[a|1]' r5.log
1:asdkweols
6:1die
转义字符: \
\可以改变正则表达式中关键字符的含义, 而是作为普通字符处理。
[padba@cnsh230234fanxb]$ cat -n r6.log
1 sdk*eee
2 ssd+slie
[padba@cnsh230234fanxb]$ grep -En '\*' r6.log
1:sdk*eee
字符类
字符类
说明
[[:alpha:]]
小写及大写字母,等价于[a-zA-Z]
[[:alnum:]]
小写和大写字母及数字,等价于[a-zA-Z0-9]
[[:cntrl:]]
控制字符,如制表符(Tab)、换行符或反斜线
[[:digit:]]
数字0~9,等价于[0-9]
[[:graph:]]
ASCII码从33~126之间的可打印字符
[[:lower:]]
小写字母,等价于[a-z]
[[:punct:]]
标点符号,包括问号、句号、逗号、冒号、分号、单引号、英文的重音符或中文的间隔号(`)、!、@、#、%、^、&、*、左右括号、左右中括号、左右大括号、正斜杠(/)、-、_
[[:upper:]]
大写字母,等价于[A-Z]
[[:space:]]
空白字符,包括空格、水平制表符、垂直制表符、换行、换页、回车
[[:xdigit:]]
十六进制字符,等价于[a-fA-F0-9]
注:中括号仅表示匹配指定字符集中的一个字符。
- linux下正则表达式学习
- Linux下正则表达式
- linux下正则表达式
- Linux下正则表达式
- linux 正则表达式学习
- linux下的正则表达式
- Linux下的正则表达式
- Linux下的正则表达式
- linux下基础正则表达式
- linux 下grep 正则表达式
- Linux下的正则表达式
- Linux下正则表达式规范
- Linux下的正则表达式
- linux下练习正则表达式
- Linux正则表达式学习笔记
- linux 正则表达式学习2
- Linux学习之正则表达式
- Linux学习之正则表达式
- Jmeter下载及安装配置
- java笔记之抽象类
- hdu 2196 Computer 树形DP或者树的直径
- Integer类==与equals区别与使用
- Origin Plusmul
- linux下正则表达式学习
- SVN安装
- 微软正在修复Windows 10周年更新导致SSD系统冻结的一个问题
- mysql --入门
- linux makefile教程
- HDU1248--完全背包
- ACCESS数据库SQL失灵
- SVN使用
- 中心向周围扩散的css圆圈,动画效果