首页 > 代码库 > 常用正则表达式实例讲解
常用正则表达式实例讲解
Shell正则表达式
正则表达式:处理大量的字符串而定义的规则和方法,通过规定的符号的组合迅速的找到需要的内容。
注意事项:
1 正表达式的应用广泛,Linux中常用的正则表达式的命令:grep(egrep),sed,awk
2.Linux的正则表达式和命令行中的通配符有本质的区别
Eg:命令行中通配符“*” 表示匹配所有,不同于正则表达式中的 *
]# ll *.sh #命令行中“*”表示匹配所有
3.文档阅读说明
文中 “]#” 表示在命令行下执行的命令即文中的绿色字体可以复制到命令航中执行
本文以实例讲解,读者可以打开虚拟机,边读边练
基础正则表达式以grep命令讲解
注意事项:
a.linux正则表达式以行为单位处理
b.为了后面便于讲解,给grep取别名,目的是给匹配到的内容带颜色显示,取别名操作如下:
]# alias grep=‘grep --color=auto’ #只在当前shell生效,如何使永久性的生效在后文有讲解
c.注意字符集,要是grep命令匹配的内容显示异常,需定义字符集:LC_ALL=C
]# LC_ALL=C
辅助文档:
# cat reTest1
I am wewin not WEWIN
I like linux
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
Linux正则表达式
1)^world 以world开头的行
2)world$ 以world结尾的行
3)^$ 表示空行
Eg:
]# alias grep=‘grep --color=auto‘ #
]# grep ‘I’ reTest1 #包含I的行
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
]# grep ‘^I‘ reTest1 # 以 I 开头的行
I am wewin not WEWIN
I like linux
I like badminntion ball,billard ball and chinese chess.
]# grep ‘I$‘ reTest1 #以I结尾的行
do you like me? but not do you like I
]# grep "^$" reTest1 #空行
]# grep -v "^$" reTest1 #排除空行
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
4). 代表且只能代表任意一个字符
5)\ 转义字符,有特殊意义的字符表示为普通的意义,还原其原本的意义
6)* 重复一个或多个前面的一个字符,不是通配符中的表示所有的意思
7)+ 前面的元素或者组合必须出现一次或多次,属于扩展的,需要用egrep
8)?规定前面的组合出现零次或一次,
9).* 匹配所有的字符。^.* 以任意多个字符开头
]# grep "." reTest1 #匹配全文,但是中间的空行会消失,要是只是单纯的匹配字符 “.” 需要转义
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
]# grep "\." reTest1 #匹配包含“.”的行,需要脱去特殊含义。
I like badminntion ball,billard ball and chinese chess.
]# grep "0*" reTest2 #包含一个或多个0
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
hahahahaha
10)[a-z] #匹配a-z字符集合内任意一个字符集
]# grep [a-z] reTest1
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
hahahahaha
11)[asdfds] #统配a-z的任意一字符集
]# grep [asdfds] reTest1
I am wewin not WEWIN
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
hahahahaha
]# grep [^a-z] reTest1 #匹配包含除过a-z字符的行,
I am wewin not WEWIN
I like linux
do you like me? but not do you like I
I like badminntion ball,billard ball and chinese chess.
number 23000000
number 12000
HAHAHAHAHA
13)^[abc] 以[a-z]开头的行
]# grep ^[a-z] reTest1
do you like me? but not do you like I
number 23000000
number 12000
hahahahaha
14){n,m} 重复n到m次,前一个字符
15){n,}至少n次多了不限
16){n} n次
17){,m}至多m次,少了不限
注意:grep要对{转义},\{ \{ 要是用egrep就不需要转义 egrep相当于grep -E
]# grep "0\{3\}" reTest1 #0连续出现3次
]# grep -E "0\{3\}" reTest1
]# grep "0\{,5\}" reTest1 #0出现0-5次
有报错,内在的bug,可以用grep "0\{0,5\}",两个属于等价的查询
18)\d 匹配任意一个数字字符,等效于 [0-9]
19)\D 匹配任意一个非数字字符,等效于 [^0-9]
20)\s 匹配任何空白字符,包括空格、制表符、换页符等,等效于[ \f\n\r\t\v]。
21)\S 匹配任何非空白字符,为\s的逆运算,等效于 [^ \f\n\r\t\v]。
22)\w 匹配任何英文字母和数字类字符以及下划线。等效于[A-Za-z0-9_]。
23)\W 匹配任何非英文字母和数字类字符,但不包括下划线。为\w的逆运算,等效于[^A-Za-z0-9_]。
本文出自 “wewinSHELL学习笔记” 博客,请务必保留此出处http://wewin11235.blog.51cto.com/8179974/1586211
常用正则表达式实例讲解