Linux 行过滤工具 grep

2017年7月16日16:55:35 发表评论 66

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep搜索的是包含某一模式的行,而不是完全匹配某一模式的行。

常用选项

-v 反转查找

-i 忽略字符大小写

-q 不显示任何信息

-E 使用扩展正则表达式

-R 在目录中递归搜索

-F 搜索固定字符串而不是搜索匹配表达式的模式

正则表达式

规定一些特殊语法表示字符类数量限定符位置限定符,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)

grep的正则表达式 有Basic和Extended两种规范,egrep相当于grep -E,表示才用Extended正则表达式语法。我们学习Extended正则表达式语法。

字符类

字符 含义 举例
. 匹配任意一个字符 abc. 可以匹配 abcd、abc3等
[] 匹配[]中的任意一个字符 [abc]d 可以匹配 ad、bd、cd
- 在[]内表示字符范围 [0-9a-fA-F] 可以匹配一位十六进制数字
^ 位于[]内开头,匹配除括号中字符之外的任意一个字符 [^a-z] 匹配除小写字母外任一字符
[[:xxx:]] grep预定义的命名字符类 [[:alpha:]] 匹配一个字母;[[:digit:]] 匹配一个数字

数量限定符

字符 含义
? 前面的单元匹配0次或1次
+ 前面的单元匹配1次或多次
* 前面的单元匹配0次或多次
{N} 前面的单元精确匹配N次
{N,} 前面的单元至少匹配N次
{,M} 前面的单元最多匹配M次
{N,M} 前面的单元至少匹配N次,最多匹配M次

位置限定符

字符 含义 举例
^ 匹配行首的位置 ^ABC匹配位于一行开头的ABC
$ 匹配行末的位置 ;$ 匹配位于一行结尾的 ; 号,^$ 匹配空行
\< 匹配单词开头的位置 \<th 匹配this 但不匹配 tenth
\> 匹配单词结尾的位置 p\> 匹配leap 但不匹配 parent
\b 匹配单词开头或结尾的位置 \bat\b 匹配 at 但不匹配 cat 或 batch
\B 匹配非单词开头和结尾的位置 \Bat\B 匹配batch 但不匹配 attend、hat

其他特殊字符

字符 含义 举例
\ 转义字符 \< \. \\
() 将正则表达式一部分括起来组成一个单元,可以对单元使用数量限定符 ([0-9]{1,3}\.){3}[0-9]{1,3} 匹配IP地址
| 连接两个子表达式,表示或的关系 n(o|on) 匹配 no 或 non

以上介绍的是grep正则表达式的Extended规范,Basic规范也有这些语法,只是字符 ? + { } | ( ) 应
解释为普通字符,要表示上述特殊含义则需要加 \ 转义。如果用grep而不是egrep,并且不加 -E
选项,则应该遵照 Basic 规范来写正则表达式。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: