一、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开头的行

093112242.png

2.匹配以c结尾的行

093150300.png

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

113545727.png

4.匹配a出现任意次数

102117775.png

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

113940189.png

6.匹配一个数字

095948743.png

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

100138703.png

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

100214743.png

9.匹配一位数

100308432.png

10.匹配非数字行

113115772.png

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

105514241.png

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

105550753.png

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

111604607.png

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

111634184.png

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

112901189.png

16.匹配字母2次行

112140932.png

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

112349820.png

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

112449792.png

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

112609734.png

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

112650599.png

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

112714510.png


4.2、综合实例

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

121744918.png

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

121942346.png

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

122145595.png

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

122444313.png

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