Shell正则表达式
正则表达式:处理大量的字符串而定义的规则和方法,通过规定的符号的组合迅速的找到需要的内容。
注意事项:
1正表达式的应用广泛,Linux中常用的正则表达式的命令:grep(egrep),sed,awk
2.Linux的正则表达式和命令行中的通配符有本质的区别
Eg:命令行中通配符“*”表示匹配所有,不同于正则表达式中的*
]#ll*.sh#命令行中“*”表示匹配所有
3.文档阅读说明
文中 “]#” 表示在命令行下执行的命令即文中的绿色字体可以复制到命令航中执行
本文以实例讲解,读者可以打开虚拟机,边读边练
基础正则表达式以grep命令讲解
注意事项:
a.linux正则表达式以行为单位处理
b.为了后面便于讲解,给grep取别名,目的是给匹配到的内容带颜色显示,取别名操作如下:
]#aliasgrep=‘grep--color=auto’#只在当前shell生效,如何使永久性的生效在后文有讲解
c.注意字符集,要是grep命令匹配的内容显示异常,需定义字符集:LC_ALL=C
LC_ALL=C
辅助文档:
#catreTest1
IamwewinnotWEWIN
Ilikelinux
Ilikebadminntionball,billardballandchinesechess.
number23000000
number12000
HAHAHAHAHA
hahahahaha
Linux正则表达式
1)^world 以world开头的行
2)world$ 以world结尾的行
3)^$ 表示空行
Eg:
]#aliasgrep='grep--color=auto'#
]#grep‘I’reTest1#包含I的行
doyoulikeme?butnotdoyoulikeI
]#grep'^I'reTest1#以I开头的行
]#grep'I$'reTest1#以I结尾的行
]#grep"^$"reTest1#空行
]#grep-v"^$"reTest1#排除空行
4).代表且只能代表任意一个字符
5)\转义字符,有特殊意义的字符表示为普通的意义,还原其原本的意义
6)*重复一个或多个前面的一个字符,不是通配符中的表示所有的意思
7)+前面的元素或者组合必须出现一次或多次,属于扩展的,需要用egrep
8)?规定前面的组合出现零次或一次,
9).*匹配所有的字符。^.*以任意多个字符开头
]#grep"."reTest1#匹配全文,但是中间的空行会消失,要是只是单纯的匹配字符“.”需要转义
]#grep"\."reTest1#匹配包含“.”的行,需要脱去特殊含义。
grep"0*"reTest2#包含一个或多个0
number23000000
number12000
10)[a-z]#匹配a-z字符集合内任意一个字符集
]#grep[a-z]reTest1
IamwewinnotWEWIN
likelinux
doyoulikeme?butnotdoyoulikeI
likebadminntionball,billardballandchinesechess.
number23000000
number12000
hahahahaha
11)[asdfds]#统配a-z的任意一字符集
]#grep[asdfds]reTest1
IamwewinnotWEWIN
doyoulikeme?butnotdoyoulikeI
Ilikebadminntionball,billardballandchinesechess.
haha
]#grep[^a-z]reTest1#匹配包含除过a-z字符的行,
IamwewinnotWEWIN
Ilikelinux
doyoulikeme?butnotdoyoulikeI
Ilikebadminntionball,0);font-weight:bold;font-size:14px;font-family:'宋体';">number23000000
number12000
HAHAHAHAHA
13)^[abc]以[a-z]开头的行
]#grep^[a-z]reTest1
14){n,m}重复n到m次,前一个字符
15){n,}至少n次多了不限
16){n}n次
17){,m}至多m次,少了不限
注意:grep要对{转义},\{\{要是用egrep就不需要转义egrep相当于grep-E
grep"0\{3\}"reTest#0连续出现3次
grep-E"0\{3\}"1
grep"0\{,5\}"#0出现0-5次
有报错,内在的bug,可以用grep"0\{0,5\}",两个属于等价的查询