grep即Globally search a Regular Expression and Print,是根据模式对文本进行搜索,并将符合模式的文本行显示出来。
grep用法如下: grep [OPTIONS] PATTERN [FILE…] 其中pattern即为模式,模式是文本字符和正则表达式的元字符组合而成的匹配条件。
grep常用的命令语法:
-i (ignore case) 忽略大小写
–colour 对查找字符加重颜色显示
-v 反向查找,显示未被匹配到的行
-o 只显示被匹配到的字符串,每个字符串显示一行
-n 输出匹配字符串在文件中的行号
-A N 输出匹配字符串的同时显示匹配字符串所有行的前N行
-B N 输出匹配字符串的同时显示匹配字符串所有行的后N行
-C N 输出匹配字符串的同时显示匹配字符串所有行的前N行和后N行
范例:
[root@localhost ~]# grep -n "root" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n --colour "root" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -o "root" /etc/passwd root root root root
[root@localhost ~]# grep -i "ROot" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
正则表达式: REGular EXPression , REGEXP
对简单的字符串进行查找匹配时,直接使用字符串查找即可。但是如果对复杂的或者按照某种规律变化的字符串进行匹配时,直接使用字符串匹配可能出现无法匹配或者效率低下的情况。所以此时使用正则表达式来定义一系列的元字符、定位符等组成一个模式进行复杂模式的字符串匹配。
下面是正则表达式的一些基本元字符:
1、字符匹配:
. :匹配任意单个字符 [] :匹配指定范围内的任意单个字符 [^] :匹配指定范围外的任意单个字符 [[:digit:]] :匹配任意单个数字 [[:lower:]] :匹配任意单个小写字母 [[:upper:]] :匹配任意单个大写字母 [[:punct:]] :匹配任意单个标点符号 [[:space:]] :匹配任意单个空白字符 [[:alpha:]] :匹配任意打个英文字母 [[:alnum:]] :匹配任意单个字母或数字
2、匹配次数:
* : 匹配其前面的字符任意次 \? : 匹配其前面的字符1次或0次 \{m,n\} : 匹配其前面的字符至少m次,至多n次,修饰的是此匹配模式的前面的字符个数
3、位置锚定:
^ : 锚定行首,此字符后面的任意内容必须出现在行首。 [root@localhost ~]# grep -n --colour '^r..t' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 以r开头,t结尾的,且必须出现在行首的位置,此时可以看到第一个root是红色的 $ : 锚定行尾,此字符前面的内容必须出现在行尾。 [root@localhost ~]# grep -n --colour '[[:digit:]]$' /etc/inittab 23:# 5 - X11 在/etc/inittab里边以数字结尾的,此时可以看到最后一个1是红色的 ^$ : 空白行 [root@localhost ~]# grep -n '^$' /usr/local/nginx/conf/nginx.conf | wc -l 此时可以查到31个空白行 \<或者\b : 锚定词首,其后面的任意字符必须做为单词的首部出现 \>或者\b : 锚定词尾,其前面的任意字符必须做为单词的尾部出现 [root@localhost ~]# grep --colour '\<ro' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost ~]# grep --colour 'ot\>' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost ~]# grep --colour '\<root\>' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 此时可以发现红色标注部分就是查询部分
4、分组
\(\) : 比如\(who\)此处给who看做一个整体进行匹配 此时有一个后向引用原则: \(who\)\(her\)[lx]*\1\2 \1为引用第一个左括号以及与之对应的右括号所包括的所有内容 \2为引用第二个左括号以及与之对应的右括号所包括的所有内容 可以以此类推下去\3 \4 \5 .......