Shell正则表达式文本处理三剑客-----grep

一、grep正则表达式
1.基础正则表达式示例
下面的操作需要提前准备一个名为 httpd.txt 的测试文件,文件具体内容如下所示
Shell正则表达式文本处理三剑客-----grep
1)查找特定字符
“-n”表示显示行号
“-i”表示不区分大小写
命令执行后,符合匹配标准的字符,字体颜色会变为红色
Shell正则表达式文本处理三剑客-----grep
Shell正则表达式文本处理三剑客-----grep
若反向选择,如查找不包含“the”字符的行,则需要通过 grep 命令的“-vn”选项实现
Shell正则表达式文本处理三剑客-----grep
2)利用中括号“[]”来查找集合字符
“[]”中无论有几个字符,都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”
Shell正则表达式文本处理三剑客-----grep
“[^]”表示集合字符的反向选择
实现该目的,如执行“grep –n ‘[ ^i ] n’ httpd.txt”命令表示在 httpd.txt 文本中查找“n” 前面不是“i”的字符串。
Shell正则表达式文本处理三剑客-----grep
查找包含数字的行可以通过“grep –n ‘[0-9]’ httpd.txt”命令来实现
Shell正则表达式文本处理三剑客-----grep
3)查找行首“^”与行尾字符“$ ”
基础正则表达式包含两个定位元字符: “ ^ ”(行首)与“$”(行尾)。在上面的示例中,查询“In”字符串时出现了很多包含“In”的行,如果想要查询以“In”字符串为行首的行,则可以通过“^”元字符来实现。
Shell正则表达式文本处理三剑客-----grep

“^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]”符号外则代表定位行首。反之,若想查找以某一特定字符结尾的行则可以使用“$”定位符。
当查询空白行时,执行“grep –n ‘^ $’ test.txt”命令即可
Shell正则表达式文本处理三剑客-----grep
4)查找任意一个字符“.”与重复字符“
前面提到,在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。例如, 执行以下命令就可以查找“w??d”的字符串,即共有四个字符,以 w 开头 d 结尾
Shell正则表达式文本处理三剑客-----grep
在上述结果中,“wood”字符串“w…d”匹配规则。若想要查询 oo、ooo、ooooo 等资料,则需要使用星号( * )元字符。但需要注意的是,“ * ”代表的是重复零个或多个前面的单字符
Shell正则表达式文本处理三剑客-----grep
5)查找连续字符范围“{}”
在上面的示例中,我们使用“.”与“
”来设定零个到无限多个重复的字符,如果想要限制一个范围内的重复的字符串该如何实现呢?例如,查找三到五个 o 的连续字符,这个时候就需要使用基础正则表达式中的限定范围的字符“{}”。因为“{}”在 Shell 中具有特殊 意义,所以在使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符。 “{}”字符的使用方法如下所示。
(1)查询两个 o 的字符
Shell正则表达式文本处理三剑客-----grep
(2)查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。
Shell正则表达式文本处理三剑客-----grep
(3)查询以 w 开头以 d 结尾,中间包含 2 以上 o 的字符串。
Shell正则表达式文本处理三剑客-----grep
查询任意数字所在行。
Shell正则表达式文本处理三剑客-----grep
二、扩展正则表达式
egrep 命令与 grep 命令的用法基本相似。egrep 命令是一个搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字或一个句子
Shell正则表达式文本处理三剑客-----grep
Shell正则表达式文本处理三剑客-----grep
Shell正则表达式文本处理三剑客-----grep
注意:egrep中元字符不可以用grep使用,反之,可以用egrep使用grep元字符