GREP是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。GREP是一种强大的文本搜索工具,也是Linux 中最广泛使用的命令之一。本篇重点介绍grep
命令,以及grep
命令与正则表达式结合使用.
基本介绍
grep
命令由选项、模式和文件三部分组成,它在一个或多个文件中搜索满足模式的文本行,模式后的所有字符串被看做文件名,文件名可以有多个, 支持通配符写法,搜索的结果被打印到屏幕,不影响原文件的内容。grep
命令的选项用于对搜索过程进行补充说明,grep
命令的选项及其意义如下表所示。
选项 | 功能 |
---|---|
-i |
忽略大小写 |
-w |
匹配单独完整的单词 |
-I |
仅列出符合匹配的文件,而不列出行 |
-r |
递归匹配 |
-n |
列出行并显示行号 |
-v |
反向匹配 |
-c |
显示匹配行数,不显示内容 |
-f file |
从文件file中提取模板作为匹配模式 |
-E |
使用扩展正则表达式 |
-F |
快速匹配,不使用正则表达式 |
-A n |
打印匹配行及其后n行 |
-B n |
打印匹配行及其前n行 |
-C n |
打印匹配行及其前后n行 |
-o |
只显示匹配到的内容 |
-q |
不输出内容,以退出状态表示搜索结果 |
正则表达式
将带元字符的正则表达式用于grep
命令能够更灵活地匹配信息,使用时需要使用单引号将正则表达式引起来,以免发生一些不可预知的错误。
模式 | 功能 |
---|---|
'^h' |
查找以h 符号开头的行 |
'^$' |
匹配空白行 |
'^/.../' |
匹配以中间含有三个字符的斜线对开头的行 |
'^/.*/' |
匹配以斜线对开头的行,里面可以有任何内容 |
[:alpha:] |
匹配字符 |
[:digit:] |
匹配数字 |
[:alnum:] |
匹配字符或数字 |
[:word:] |
匹配单词字符 |
实例
- 统计
/etc/init.d/functions
文件中每个单词出现的次数并排序
grep -Eo '[[:alnum:]_]+' /etc/init.d/functions | sort | uniq -c | sort -nr
- 查找两个文件中重复的行
$ cat test1
aa
bb
cc
ddd
eee
$ cat test2
aa
bb
ccc
dd
eee
$ grep -wf test1 test2
aa
bb
eee