1、正则表达式的概念:
所谓正则表达式就是处理字符串的方法,它是以行为单位来进行字符串处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序
2、基础正则表达式的元字符的意义:
[:lower:]、[a-z] 代表小写字母
[:upper:]、[A-Z] 代表大写字母
[:alnum:]、[a-zA-z0-9] 代表数字和大小写字母
[:alpha:]、[a-zA-Z] 代表大小写字母
[:digit:]、[0-9] 代表数字
[:space:] 代表空白符
[:punct:] 代表标点符号
注意:一般在使用方括号字符集的时候会配合使用[],比如:grep "^[[:space:]]*" /etc/inittab
这个命令的意思就是显示/etc/inittab文件中以空白字符开头的行
命令中注意 ^ 和 [ ] 的使用,通常用来匹配开头是某个字符,如 ^[[:space:]]表示开头是空白符,如果写成
^[:space:],那就是锚定[]里面的内容
比如这个命令就是正常的使用[:space:]:
grep "^#[:space:]\{1,\}" /etc/password 显示/etc/password文件中以#开头后面一个或多个空白符的行
所以 [ ] 的作用是用来锚定某个字符或代表多个可能的字符集(简单就是[]内的内容为一个整体)
^word 待查找的字符串(word)在行首 如:
#grep "^root" /etc/passwd,查 找行首为root的用户信息
word$ 待查找的字符串(word)在行尾
. 匹配到的至少有一个任意的字符 如:l.e ,匹配到的是loe,lbe,lse,le
* 匹配前面的字符无限次 如:de* ,匹配到的可以是dee,deee,deeee
.* 匹配任意长度的字符任意次
\ 转义符,将特殊符号的特殊意义去除
\{m,n\} 匹配到的字符出现m到n次 如:
#grep "ro\{1,4\}t" /etc/passwd,
在/etc/passwd中查找含有rot中o出现有1次或者2次的那行
\{m,\} 匹配到的字符最少出现m次 如:ro\{1,\}t ,o至少出现一次,像 root,rooot
\{0,n\} 匹配到的字符出现0到n次
\{n\} 匹配到的字符最多出现n次 如:ro\{1\}t ,o最多出现一次,像rot,rt
^ 锚定行首 如:
grep "^root" /etc/passwd ,在/etc/passwd中,以 root为行首的那行
$ 锚定行尾
^$ 空白行
word\> 锚定词尾
\<word 锚定词首
分组引用: \(), \1,\2
s/ / /g --> 全局查找替换
s/l..e/$er/g ---> &引用前面匹配的字符 l..e 并替换成 l..eer
3、扩展正则表达式:
{m,n} 匹配到的字符出现m次到n次
{0,n} 匹配到的字符出现0到n次
{m,} 匹配到的字符出现至少m次
? 匹配到前面的字符0或1次
() 找出组字符串 如:查找(good)或(gold)这两个字符串,就是 g(la|oo)d
+ 匹配前面的字符至少1次,相当于\{1,\}
| 或者
4、grep命令的用法
grep是分析一行信息,若当中有我们所需要的信息,就将该行拿出来,简单的语法如下:
grep [选项] ‘查找字符串’ filename
选项:
-v 对所显示的结果取反 如:在last的输出的信息中,只要没有root就取出,并且仅取第一列
#last | grep -v "root" | cut -d' ' -f1
-o 仅显示匹配到的字符串
-i 忽略字母的大小写
-E 支持扩展正则表达式
-n 顺便输出行号 如:在/etc/passwd中有root的那行,并且显示行号,
#grep -n "root" /etc/passwd
例子:在last显示的信息中,取出不含root的那些行,并且输出的时候显示行号:
#last | grep -vn "^root"
例子:在/etc/passwd中,以r为开头的,后面跟无论大小写至少出现一次的那些行的信息
#grep “^r[a-zA-Z]\{1,\}" /etc/passwd