Linux-grep命令详解
一、grep介绍
全拼:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行.
模式:由正则表达式的元字符及文本字符所编写出的过滤条件﹔
语法:
grep [options] [pattern] file
命令 参数 匹配模式 文件数据
grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式
常见参数:
-i: ignorecase,忽略字符的大小写
-v: 显示不能被模式匹配到的行
-E: 支持使用扩展的正则表达式元字符(egrep)
-n:显示匹配行的行号
-r:递归查找子目录中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行数
-H: 在显示符合样式的那一行之前,表示该行所属的文件名称
-s:无声操作只显示报错,检查退出状态
-e:使用正则表达式
-w:精确匹配
-wc:精确匹配次数
-o:查询所有匹配字段
-A3:打印匹配行和下三行
-B3:打印匹配行和上三行
-C3:打印匹配行和上下三行
二、grep实践
先看一下这个测试文件的内容吧
2.1、输出以r开头的行(不区分大小写)
注: 这里的-i代表不区分大小写, -n代表显示匹配行和行号
2.2、输出以.结尾的行
注: 因为.在这里有着特殊含义, 所以要用\转义一下, 如果不加转义字符的话, grep就会把它当做正则表达式来处理(.代表的含义是匹配任意一个字符)
2.3、$符号
在Linux系统中, 所有文件的结尾都有一个$符
可以利用cat -A 查看文件
2.4、^$(代表空行的意思)组合符
找出文件的空行, 以及行号
2.5、.点符号
"."点表示任意一个字符, 有且只有一个, 不包含空行
2.6、*符号
"*"表示找出前一个字符0次或一次以上
找出文件中r出现0次或多次的行和行号
2.7、.*组合符
".*"表示所有内容, 包括空行
2.8、^.*t符 (含义: 以任意内容开头, 直到t结束)
2.9、[abc]中括号
中括号表达式,[abc]表示匹配中括号中任意一个字符, a或b或c,常见的形式如下;
[a-z]匹配所有小写单个字母[A-Z]匹配所有单个大写字母
[a-zA-Z]匹配所有的单个大小写字母
[0-9]匹配所有单个数字
[a-zA-ZO-9]匹配所有数字和字母
匹配rt字符中的任意一个,得到它的行数和行号
2.10、[^abc]中括号中去反
[^abc]或[^a-c]这样的命令, "^"符号在中括号中第一位表示排除, 就是排除字符a,b,c
注: 出现再中括号里的尖角号表示取反
三、扩展正则grep实践
使用grep -E进行实践扩展正则, egrep官网已经弃用了
3.1、+号
+号表示匹配前一个字符1一次或多次,必须使用grep-E扩展正则
3.2、?符
匹配前一个字符0次或1次
找出文件中包含rt或者rot的行
3.3、|符
竖线|再正则中是或者的意思
找出端口号为80的进程名
3.4、()小括号
将一个或多个字符捆绑在一起, 当作一个整体进行处理
3.5、{n,m}匹配次数
{n,m}:匹配前一个字符至少n次, 最多m次
{n,}: 匹配前一个字符至少n次, 没有上限
{,m}: 匹配前一个字符最多m次,可以没有
重复前一个字符各种次数, 可以通过-o参数显示明确的匹配过程