一、grep、egrep命令格式介绍:

grep和egrep是关于文本处理的命令,给定选取条件,只显示符合条件的行。


使用的格式为:grep [options] 'pattern' FILE
             egrep [options] 'pattern' FILE
格式说明:options 表示选项  pattern 表示过滤模式 FILE 表示需要处理的文件



二、grep常用的选项


--color=auto:匹配到的文本自动高亮显示默认给红色
-v:反向选取,只显示不符合模式的行
-o:只显示被模式匹配到的字串,而不是整个行
-i:匹配时不区分字符的大小写
-A n:显示匹配到的行时,顺带显示其后面的n个行
-B n:显示匹配到的行时,顺带显示其前面的n个行
-C n:显示匹配到的行时,顺带显示其前面和后面的n个行
-E:匹配使用扩展的正则表达式 (注:下面会有详细介绍)
-r;递归搜索匹配到的文本
egrep常用的选项和grep常用的选项相同,并且grep -E 相当于egrep


pattern表示过滤模式,使用正则表达式来描述选择条件,下面详细介绍正则表达式的有关内容;

三、正则表达式

正则表达式分为两种:基本正则表达式和扩展正则表达式
grep 支持基本的正则表达式 egrep 支持扩展的正则表达式,因此有上述选项-E 可知 grep -E相当于egrep

3.1、基本正则表达式
基本正则表达式:工作在贪婪模式下,即尽可能长的去匹配符合模式的内容
包括的元字符有:(注:元字符不表示字符本身的意义而用于额外功能性的描述)

^:锚定行首符合条件的内容,用法格式"^pattern"
$:锚定行尾符合条件的内容,用法格式"pattern$"
^$:表示空白行
.:匹配任意单个字符
*:匹配紧挨在其前面的字符任意次:
\?:匹配紧挨在其前面的字符0次或1次;
\{m,n}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次:0-n次
\{m,\}:至少m次
.*:匹配任意长度的任意字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
\<:锚定词首,用法格式:\<pattern
\>:锚定词尾,用法格式:pattern\>
\<pattern\>:单词锚定
\(\):分组:用法格式:\(pattern\)


3.2、 扩展正则表达式


.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
*:匹配前面的字符任意多次
+:匹配前面的字符至少一次
?:匹配前面的字符0次或一次
{m,n}:至少m次,至多n次;
():分组,支持引用\1 ,\2
a|b;二选一,或者,a或者b
\<:锚定词首
\>:锚定词尾
^:锚定行首
$:锚定行尾
单词锚定和行首行尾锚定和基本正则表达式一样

 注:如果想详细了解正则表达式元字符的相关说明可以通过 man regex进行查看

3.3、常用的字符集合


[:digit:]:所有数字, 相当于0-9
[:lower:]:所有的小写字母
[:upper:]:所有的大写字母
[:alpha:]:所有的字母
[:alnum:]:相当于[0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:所有标点符号


四、实例讲解

4.1、基础简单实例


首先创建test.txt文件,文件内容如下:

#cat test.txt
1
12
123
adc
abc abc def  ghi
a 2 33 45
1 asd da a
abcdab
abcdba
12abcd12
mnlanliannm
1a
bc
a1
aab
aaac
aabaaacaaaad

注:grep用了命令别名:#  alias grep='grep --color=auto'

1.匹配以a开头的行

详解grep、egrep及正则表达式_grep

2.匹配以c结尾的行

详解grep、egrep及正则表达式_正则表达式_02

3.匹配a后面跟任意单个字符

详解grep、egrep及正则表达式_正则表达式_03

4.匹配a出现任意次数

详解grep、egrep及正则表达式_grep_04

5.匹配a后面跟任意一个字符出现任意次数

详解grep、egrep及正则表达式_grep_05

6.匹配一个数字

详解grep、egrep及正则表达式_grep_06

7.匹配一个数字结尾的行

详解grep、egrep及正则表达式_正则表达式_07

8.匹配一个数字开头的行

详解grep、egrep及正则表达式_grep_08

9.匹配一位数

详解grep、egrep及正则表达式_grep_09

10.匹配非数字行

详解grep、egrep及正则表达式_正则表达式_10

11.匹配一个数字或0个数字的行

详解grep、egrep及正则表达式_grep_11

12.匹配一个或0个数字开头的行

详解grep、egrep及正则表达式_正则表达式_12

13.匹配一个或0个数字开头并结尾的行

详解grep、egrep及正则表达式_grep_13

14.匹配至少出现三次的数字的行

详解grep、egrep及正则表达式_grep_14

15.匹配至多出现两次的数字的行

详解grep、egrep及正则表达式_正则表达式_15

16.匹配字母2次行

详解grep、egrep及正则表达式_正则表达式_16

17.一个或两个字母进行词首锚定的行

详解grep、egrep及正则表达式_grep_17

18.匹配一或两次字母,进行词尾锚定的行

详解grep、egrep及正则表达式_正则表达式_18

19.匹配一到两个字母的单词行

详解grep、egrep及正则表达式_grep_19

20.显示一行中包含12和12之间的内容

详解grep、egrep及正则表达式_grep_20

21.显示一行中包含mn和nm之间的内容

详解grep、egrep及正则表达式_正则表达式_21


4.2、综合实例

1.显示/proc/meminfo文件中以不区分大小的s开头的行;

详解grep、egrep及正则表达式_grep_22

2.显示/etc/passwd中以nologin结尾的行;

详解grep、egrep及正则表达式_grep_23

3、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

详解grep、egrep及正则表达式_正则表达式_24

4、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同;

详解grep、egrep及正则表达式_正则表达式_25

说明:本博文仅根据自己所学知识归纳总结和实现,望对初学者有所帮助!