Shell正则表达式linux
正则表达式:处理大量的字符串而定义的规则和方法,经过规定的符号的组合迅速的找到须要的内容。正则表达式
注意事项:shell
1 正表达式的应用普遍,Linux中经常使用的正则表达式的命令:grep(egrep),sed,awkide
2.Linux的正则表达式和命令行中的通配符有本质的区别字体
Eg:命令行中通配符“*” 表示匹配全部,不一样于正则表达式中的 *spa
]# ll *.sh #命令行中“*”表示匹配全部命令行
3.文档阅读说明 文档
文中 “]#” 表示在命令行下执行的命令即文中的绿色字体能够复制到命令航中执行字符串
本文以实例讲解,读者能够打开虚拟机,边读边练虚拟机
2014/12/4修改文中错误
基础正则表达式以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\}",两个属于等价的查询