高效能程序工具之grep
来源:互联网 发布:软件概要设计 编辑:程序博客网 时间:2024/06/01 22:36
http://blog.csdn.net/hitlion2008/article/details/7538064
grep是global regular expression pattern,意思是全局正则表达模式匹配。通俗来讲就是用于模式匹配,或者叫做查找。它有几个变体:
- egrep ---- 相当于grep -e
- fgrep ---- 相当于grep -f
- rgrep ---- 相当于grep -r
这几个不是很常用,已经是Deprecated,建议还是用grep。
命令格式
grep [options] [-e|--regexp PATTERN] PATTERN FILEs
例如:
grep -rin --color -E -e "task" -e "run" RunOrStart.java
常用选项
- -i 忽略大小写
- -r 递归式的处理子目录
- -n 输出时带有与模式相匹配的行号
- -w 仅匹配整个单词,相当于\bPATTERN\b
- -e 指定一个模式
- -E 用扩展正则表达式
- -x 匹配一整行,相当于^PATTERN$
- -I 忽略二进制文件
- --color 输出时用颜色来高亮显示匹配的模式
因为某些选项特别的常用,所以可以用alias来改造grep,让其变成默认选项:
alias grep="grep -rnEI --color"
解释:
-r 99%的情况下是肯定要查询子目录的。
-n 输出时带有行号可以方便后面的操作。
--color 高亮输出,方便查看
-I 多数情况下,都是处理纯文本(代码,Makefile,config file),所以要忽略二进制文件,就不会出现如下的输出:
- <span style="font-size:18px;">alex:~$ grep shell *
- Binary file libwebcore.so matches</span>
-E 因为默认情况下是用BRE(Basic Regular Expression),某些操作符如|(alternate), +(one or more repetition)无效,如:
grep "task|run" * (no matches)
- <span style="font-size:18px;">grep "task|run" * (no matches)
- grep "tas\w+r" * (no matches)</span>
用-E来使用ERE(Extended Regular Expression)就可以使用这此:
- <span style="font-size:18px;">alex:~/work/java$ grep -E "task|run" *
- RunOrStart.java: public void run() {
- RunOrStart.java: System.out.println("TestRun.run(), start running are you aware of that" + name);
- RunOrStart.java: System.out.println("TestRun.run(), end running" + name);
- RunOrStart.java: public void run() {
- RunOrStart.java: System.out.println("TastStart.run(), start running are you aware of that" + name);
- RunOrStart.java: System.out.println("TastStart.run(), end running" + name);
- RunOrStart.java: new TaskRun("taskrun").run();
- RunOrStart.java: System.out.println("taskrun is ending");
- RunOrStart.java: new TaskStart("with run").run();
- RunOrStart.java: System.out.println("taskstart.run is ending");
- alex:~/work/java$ grep -E "tas\w+r" *
- RunOrStart.java: new TaskRun("taskrun").run();
- RunOrStart.java: System.out.println("taskrun is ending");
- RunOrStart.java: System.out.println("taskstart.run is ending");</span>
关于引号的使用quoted pattern
先来看二个例子:
- <span style="font-size:18px;">alex:~/work/java$ grep tas\w*r *(no outputs)
- alex:~/work/java$ grep "tas\w*r" *
- RunOrStart.java: new TaskRun("taskrun").run();
- RunOrStart.java: System.out.println("taskrun is ending");
- RunOrStart.java: System.out.println("taskstart.run is ending");</span>
对于grep的参数PATTERN是一定要用引号的,单引双引均可,以防止Shell对某些具有特殊意义的字符进行扩展,如&,\,|等,如不加引号会变成后台运行,转义和管道。
- 高效能程序工具之grep
- 高效能程序工具之grep
- 高效能程序工具之ctags和Vim
- shell工具篇之grep
- linux文本处理工具之grep
- Linux之grep工具的使用
- Linux工具之grep&&sed&&awk
- 如何高效能地学习和使用"工具"?
- 正则表达之grep;sed;awk工具简述
- shell浅谈之七文本处理工具grep、sed、awk
- shell浅谈之七文本处理工具grep、sed、awk
- shell浅谈之七文本处理工具grep、sed、awk
- grep工具的使用
- find&grep查找工具
- Linux grep --搜索工具
- grep 工具使用
- grep工具的使用
- 高效能人士的七个习惯之积极主动
- unity3d Vignetting效果分析
- GetLastError() == 0xEA
- Java容器集合类的区别用法
- (2)Java正则表达式学习
- 在Eclipse中关联Java中文API
- 高效能程序工具之grep
- 利用jQuery和JS实现奇偶行背景颜色自定义效果
- 2013-02-13 -loader
- 美国12个最酷创业公司总部
- eclipse3.7中文字符太小解决方案
- hibernate的select 读取结果集的两种显示方法
- sleep和wait有什么区别?
- CentOS 6.3安装极点五笔输入法
- 初识python多线程(转+实例)