正则表达式与grep,egrep简单入门
正则表达式
什么是正则表达式:
通过一系列特定的元字符按照某种特定的规则组成的字符串,我们将这个字符串称为正则表达式;
正则表达式的作用:
通过这些字符串不同的组成方式,我们可以用他们轻松的找到自己需要的内容(比如编辑器里面的内容查找),也可以用他们将我们不需要的内容隔离开(WEB页面中的JS匹配邮箱等);
正则表达式的特点:
功能强大,应用面广,活用性强,使用简单稍加练习就能上手,能迅速的用极其简单的方法达到对字符串的复杂控制;
正则表达式的常用元字符:里面的很多反斜杠 \ 是翻译字符,这里先说明,这样下面的很多元字符看着会很明白,就不乱了;
匹配元字符:
. 表示匹配单个字符 # grep ‘ro.t’/etc/passed
[ ]表示匹配集合内的任意单个字符# grep ‘ro[oO]t’/etc/passed
[^ ]表示匹配除集合内的任意单个字符 # grep ‘ro[^a-np-z]t’/etc/passed
常用的字符集合:使用时加上[] 如[[:digit:]] 表示单个数字
[:space:] 空白
[:punct:] 标点
[:lower:] 小写字母
[:digit:] 数字
[:upper:] 大写字母
[:plnum:] 字母
[:alpha:] 数字和字母
数量匹配:
\?表示前面的字符一次或零次 # grep ‘a\?b’ #结果是ab,b,都能匹配
* 表示前面的字符出现任意次# grep ‘a*b’ #结果是ab,aaabaaaaaab都能匹配
\+表示前面的字符出现至少一次# grep ‘a\+b’ #结果是ab,aab,aaab都能匹配b就匹配不到了
\{m,n\}表示前面的字符至少m次,最多n次# grep ‘a\{1,2\}b’ #结果是a最少出现一次,最多两次,这里m和n可以省略其中一个,表示匹配前面字符至少m次或者至多n次
位置锚定:
^ 行首匹配符,表示匹配到的结果必须在行首的# grep ‘^root’/etc/passed
$行尾匹配符,表示匹配到的结果必须在行尾的# grep ‘shell$’/etc/passed
\< 词首匹配符 表示其后面的字符必须以作为单词首字母形式出现,
# grep ‘\<r’/etc/passed
\> 词尾匹配符 表示其前面的字符必须以作为单词尾字母形式出现,
# grep ‘t$’/etc/passed
\ 转义字符,让元字符显示它原本的信息,
.* 表示任意长度的任意字符;
^$ 空白行;
\< \> 单词锚定;
补充个定义 : 什么是单词,计算机定义 只要连续字符串之间没空格或者符号的,就叫单词;
\(\) : 分组, 将\(\)之间的内容定义为一个组合,# \(ab\)* #ab可以连续出现abababab...
分组支持后向引用,就是引用左边第一个括号开始到与其对应的右括号之间的内容,
引用方法:从左边数第一个为\1,第二个为\2 一次推类 ...
除了正则表达式,还有正则表达式的升级版,叫扩展正则表达式:
扩展正则表达式和正则表达式区别不是很大,有个很明显的区别就是将正则表达式一些元字符的转义反斜线去掉了,加了些新功能,以下是简单的比较说明;
正则表达式扩展正则表达式
. .
* *
[ ] [ ]
[^] [^ ]
\? ?
\+ +
^ ^
$ $
\{\} { }
\< \<
\> \>
\( \) ( )
\ \
补充:扩展正则表达式支持对象内的或关系表示( )
#找出etc/passwd文件中以root或者rOOt开头的文件,
grep '^r(oo|OO)t' /etc/passed
练习题:匹配IP段(1-255) 类似于:192.168.0.1
#egrep '@H_311_301@\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'
grep 命令:文本过滤命令,默认是用正则表达式;
@H_311_301@ --color 将匹配到的结果高亮显示;
@H_311_301@- i 匹配结果不区分大小写;
@H_311_301@- E使用扩展正则表达式; 可以用命令egrep 直接使用扩展正则,参数都一样;
@H_311_301@- A 数字 显示匹配到结果的行及后面的n行;