Linux之grep、egrep、fgrep
时间:2023-08-21 07:07:00
grep:Global Search Regular Expression And Print Out The Line 功能:文本搜索工具,目标文本根据用户指定的模式(过滤条件)进行匹配检查;打印匹配行 模式:由正则表达式元字符和文本字符编写的过滤条件 grep grep [OPTIONS] PATTERN [FLE..] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE.. OPTIONS: --Color-auto:匹配的文本着色后亮点显示 -i忽略字符的大小写 -o:只显示匹配的字符串本身 -V:模式无法匹配显示的行 -E:正则表达式元字符支持扩展的使用 -q:静默模式,即不输出任何信息; -A #: after, 后#行 -B #: before, 前#行 -C #: context, 前后各#行 基本正则表达式元字符: 字符匹配: .:匹配任意单个字符 []:在指定范围内匹配任何单个字符 [^]:在指定范围外匹配任何单个字符 [digit:]、[:lower:]、[upper]、[alpha:]、[alnum:]、[punct:]、[:space:] 匹配次数:用于指定字符出现次数的,限制前面字符出现的次数 *:匹配前面的字符; 0,1,多次 .*:匹配任何字符的任何字符 \?:匹配前面的字符0次或1次;也就是说,前面的字符是可有可无的 \ :匹配前面的字符一次或多次;即其表面的字符至少应出现一次 \{m\}:匹配前面的字符m次 \{m,n\}:至少匹配前面的字符m次,至多n次 \{0,n\}:至多n次 \{m,)}:至少m次 位置锚定: ^:行首锚定;模式最左侧 $:行尾锚定;模式最右侧 ^PATTERN$:用于PATTERN来匹配整行 ^$:空白行 ^[:space:]*$: 空行或包含空白字符的行 单词:由非特殊字符组成的连续字符(字符串)称为单词 \<或\b:词首锚定,用于单词模式的左侧 \>或\b: 词尾锚定,用于单词模式的右侧 \:匹配完整单词 练习: 1、显示/etc/passwd文件中不是/bin/bash结尾的行 2、找出/etc/passwd文件中的两位数或三位数 ~]# grep "\<[0-9]\{2,3\\>" /etc/passwd 3、找出/etc/rc.d/rc.sysinit或etc/rub2文件中, 以至少一个腔白字符开始,而后面的非空白字符线; 4、找出"netstat -tan"命令结果中以LISTEN后跟0、1或多个空白字符的结尾 分组及引用 \(\)将一个或多个字符绑在一起, 当作- -整体处理; \xy\)*ab Note:正则表达式引擎自动记录分组括号中模式匹配的内容,即: \1:模式从左侧开始,第一个左括号匹配的第一个左括号和字符; \2:模式从左侧开始,与右括号模式匹配的第二个左括号和字符; \3... ... He loves his lover. He lkes his lover. She lIkes her lker. She loves her lker. ~]# grep "\(l...e\).*\l" lovers.txt 后引用:引用前面分组括号中匹配的字符 egrep egrep [OPTIONS] PATTERN [FLE..J. 选项: -o,-v,-q, A, -B, -C -G:支持基本正则表达式 扩展正则表达式元字符: 字符匹配: .:任何单个字符 []:指定范围内的任何单个字符 [^]:指定范围外的任何单个字符 次数匹配: *:任意次,0,1或多次 ?: 0次或1次,前面的字符是可有可无的 :至少一次前面的字符 {m}:前一个字符m次 {m,n}:至少m次,最多n次 {0,n} {m} 位置锚定 ^:行首锚定 $:行尾锚定 \<, \b: 词首锚定 \>, \b:词尾锚定 分组及引用: ():分组;括号中模式匹配的字符将记录在正则表达式引擎的内部变量中 后向引用: \1, \2, ... 或: a|b: a或者b; C|cat: C或cat (c|C)at: cat或Cat 练习: 1、找出/proc/meminfo文件中,大写或小写s开头的所有行;至少有三种实现方法 2.显示当前系统root, centos或user用户的相关信息 3、找出/etc/rc.d/init.d/functions文件中的一个单词后面有一个小括号 4、使用echo命令输出-绝对路径,使用egrep取出基名 5、找出ifconfig命令结果 1-255之间的值 6.课外作业:找出来ifconfig在命令结果中IP地址 7、添加用户bash, testbash, basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd用户名在文件中相同shell名的行 fgrep:正则表达式元字不支持 不需要元字符 使用编写模式fgrep必能更好