grep详解
一.简介
Global Regular Expression Print,是一种强大的文本搜索工具,能使用正则表达式。
二.语法
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
如果用-E/-e,则pattern就不需要转义。
2.1 [options]主要参数
选项 | 备注 |
-c | 只输出匹配行的计数。 |
-o | 只输出匹配的部分。 |
-i | 不区分大小写(只适用于单字符)。 |
-h | 查询多文件时不显示文件名。 |
-l | 查询多文件时只输出包含匹配字符的文件名。 |
-L | 列出不匹配的文件名 |
-n | 显示匹配行及行号。 |
-s | 不显示不存在或无匹配文本的错误信息。 |
-v | 显示不包含匹配文本的所有行(反向)。 |
-r | 搜索子目录 |
-d | 略过子目录 |
-A n | 匹配行上下文向后追加n行 |
-B n | 匹配行上下文向前追加n行 |
-C n | 匹配行上下文向前/向后都追加n行 |
-E | 等价于egrep,正则义 |
-F | 等价于fgrep,转义 |
2.2 pattern正则表达式主要参数(用\转义)
选项 | 备注 |
\ | 忽略正则表达式中特殊字符的原有含义。 |
| | 或 |
^ | 匹配正则表达式的开始行。 |
$ | 匹配正则表达式的结束行。 |
\< | 从匹配正则表达 式的行开始。 |
\> | 到匹配正则表达式的行结束。 |
[ ] | 单个字符,如[A]即A符合要求 。 |
[ - ] | 范围,如[A-Z],即A、B、C一直到Z都符合要求 。 |
. | 所有的单个字符。 |
? | 至多1次 |
* | 零次以上。 |
+ | 1次以上。 |
{n} | 严格匹配n次 |
{n,} | n次以上 |
{n,m} | [n,m]次 |
三.简例
• $ grep ‘test’ *.txt
显示所有以d开头的文件中包含 test的行。
• $ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
• grep -o -E 'id=[0-9]+' data.doc
只输出行中"id=xxx"的部分。
• grep -o -E '\bword\b' test.txt|wc -l
统计word单词的个数
• grep -Ev '^$|^#' test.txt
匹配非空行和注释行
• ps -aux|grep tomcat | grep -v grep
排除自身
• $ grep ‘[a-z]\{5\}’ aa
• $ grep ‘[a-z]\+’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
• $ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
• $ grep pattern1 | pattern2 files
或
• $ grep pattern1 files | grep pattern2
与
• $ grep 'aa' a.txt | wc -l
统计行数
• $ grep '\$' a.txt
忽略正则表达式中特殊字符的原有含义
• grep '^[^48]' data.doc
不匹配行首是48的行
• grep '[^a-zA-Z]oo' pp
匹配oo之前没字符的行
• egrep '219|216' data.doc
使用扩展模式匹配
• egrep 'g(o|pp)d' pp
匹配含有god或gppd的行
end
- 作者:水岩
- 出处:http://www.cnblogs.com/waterystone
- 本博客中未标明转载的文章归作者水岩和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您觉得本文对您的学习有所帮助,可通过支付宝(左) 或者 微信(右) 来打赏博主,增加博主的写作动力