一、学习目标
了解并能熟悉运用grep、egrep、fgrep命令。
二、学习内容
1、grep、egrep、fgrep命令的意思和用法格式 :
grep:是使用基本正则表达式定义的模式来过滤文本的命令。
# grep [options] PATTERN [FILE,...]
egrep :是使用扩展正则表达式的模式来过滤文本的命令。
# egrep [options] PATTERN [FILE,...]
fgrep:不支持正则表达式,是使用文字本身的意义的模式来过滤文本的命令。
# fgrep [options] PATTERN[FILE,...]
注:PATTREN: 文本字符和正则表达式的元字符组合而成的匹配条件
2、grep命令常用的option
-i : 忽略字符的大小写
--color: 对pattern的内容加上颜色
-v:显示没有被匹配的行
-o:只显示被模式匹配到的字符串
-E:使用扩展的正则表达式 ==egrep
-F:==fgrep
-A n: 同时显示被pattern的内容的后n行
-B n:同时显示被pattern的内容的前n行
-C n: 同时显示被pattern的内容的前后n行
3、了解什么是正则表达式
正则表达式分为:基本正则表达式和扩展正则表达式
(1)基本正则表达式有 :
字符匹配:
. :表示匹配任意单个字符
[] :表示匹配指定范围内的任意单个字符
[^]:表示指定范围之外的任意单个字符
[:space:]: 空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:数字
[:alnum:]:数字和大小写字母
匹配次数:
*: 匹配其前面字符任意次
.*:匹配前面字符任意长度和任意次数
\? :匹配前面的字符一次或0次
\{m,n\}:匹配前面字符至少m次,至多n次
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行,
\<:其后面的内容必须作为单词的首部出现
\>: 其前面的内容必须作为单词的尾部出现
分组:
\(\) : 将括号的内容作为一个整体
\1 : 指第一个左括号和与之对应的右括号的所有内容
\2: 指第二个左括号和与之对应的右括号的所有内容
.....
(2)扩展的正则表达式:
字符匹配:(与基本的正则表达式中的相同)
次数匹配:
*:匹配其前面字符任意次
?:匹配前面的字符一次或0次
+:匹配前面字符至少一次
{m,n}:匹配前面字符至少m次,至多n次
锚定匹配:(与基本的正则表达式中的相同)
分组: ():把括号里的内容作为一个整体 \1 \2 \3 ....
或者: | :表示或者
4、命令的使用演示
----------------------------------------------------------------------
1、显示/proc/meminfo文件中以不区分大小的s开头的行;
2、显示/etc/passwd中以nologin结尾的行;
取出默认shell为/sbin/nologin的用户列表
取出默认shell为bash,且其用户ID号最小的用户的用户名
3、显示/etc/inputrc中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
4、显示/etc/passwd中包含了:一个数字:(即两个冒号中间一个数字)的行;
5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
7、找出/proc/cpuinfo文件中的,1位数和2位数
8、找出ifconfig命令结果中的1-255之间的整数;
9、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
11、显示所有以小写字母开头且数字结尾且文件名中不包含空白的文件;
如果大家看了这文章觉得有问题,欢迎提出来,也欢迎大家来一起讨论,一起提高!
文本查找查找命令的grep 、egrep、fgrep用法的详解