grep,fgrep,egrep
来源:互联网 发布:java自学视频教程 编辑:程序博客网 时间:2024/04/29 11:31
转载:http://blog.chinaunix.net/uid-7374279-id-3849705.html
一、grep家族简介1、Unix的grep家族包括:grep、egrep和fgrep1)
1)grep(1)grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出
(2)grep的工作方式:它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用(双引号或者单引号),模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容
(3)linux是使用GNU版本的grep,它的功能更强,可以通过-G(默认参数)、-E、-F命令行选项来使用egrep和fgrep的功能
grep -E <=> egrep
grep -F <=> fgrep
(4)grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。所以我们利用这些返回值就可进行一些自动化的文本处理工作
2)egrep
egrep命令只跟grep有很小的不同,egrep是grep的扩展,支持更多的re元字符
3)fgrep
fgrep的命令只跟grep有很小的不同, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊
二、grep正则表达式元字符集(基本集)
^
匹配行首,例如:’^grep’匹配所有以grep开头的行
$
匹配行尾,例如:’grep$’匹配所有以grep结尾的行
.
匹配一个非换行符的字符,例如:’gr.p’匹配gr后接一个任意字符,然后是p
*
匹配零个或多个先前字符,例如:’*grep’匹配所有一个或多个空格后紧跟grep的行;.*一起用代表任意字符
[ ]
匹配一个指定范围内的字符,例如:’[Gg]rep’匹配Grep和grep
[^ ]
匹配一个不在指定范围内的字符,例如:’[^A-FH-Z]rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行
\(..\)
标记匹配字符,例如:’\(love\)’,love被标记为1
\<
匹配单词的开始,例如:’\<grep’匹配包含以grep开头的单词的行
\>
匹配单词的结束,例如:’grep\>‘匹配包含以grep结尾的单词的行
x\{m\}
重复字符x,m次,例如:’o\{5\}’匹配包含5个o的行
x\{m,\}
重复字符x,至少m次,例如:’o\{5,\}’匹配至少有5个o的行
x\{m,n\}
重复字符x,至少m次,不多于n次,例如:’o\{5,10\}’匹配5–10个o的行
\w
匹配文字和数字字符,也就是[A-Za-z0-9],例如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p
\W
匹配一个或多个非单词字符,例如:点号句号等
\b
单词边界符,例如:’\bgrepb\’,只匹配grep
\B
单词非边界符,例如:’\Bok’,不能匹配grep单词,而能匹配book
三、用于egrep和 grep -E的元字符扩展集
+
匹配一个或多个先前的字符,例如:’[a-z]+able’,则匹配一个或多个小写字母后跟able的串:loveable,enable,disable等
?
匹配零个或多个先前的字符,例如:’gr?p’,则匹配gr后跟一个或没有字符,然后是p的行
a|b|c
匹配a或b或c,例如:(grep)|(sed),则匹配grep或sed
()
分组符号,如:love(able|rs)ov+,则匹配loveableov或loversov
x{m},x{m,},x{m,n} ó x\{m\},x\{m,\},x\{m,n\}
四、POSIX字符类
为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]
匹配任何一个字母或数字([A-Za-z0-9])
[:alpha:]
匹配任何一个字母([A-Za-z])
[:digit:]
匹配任何一个数字([0-9])
[:lower:]
匹配任何一个小写字母([a-z])
[:upper:]
匹配任何一个大写字母([A-Z])
[:space:]
任何一个空白字符:制表符、空格
[:blank:]
空格和制表符(横向和纵向),等价于'[\s\t\v]'
[:graph:]
任何一个可看得见且可打印的字符(注意:不包括空格和换行符等)
[:print:]
任何一个可以打印的字符(注意:不包括[:cntrl:], 但包括空格符号)
[:cntrl:]
任何一个控制字符(ASCII字符集中的前 32 个字符,即:用十进制
表示为从 0 到 31,例如:换行符、制表符等等)
[:punct:]
任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]字符集)
[:xdigit:]
任何一个十六进制数(即:0-9,a-f,A-F)
五、grep命令选项
grep [options] PATTERN [FILE...]
grep [options] [ -e PATTERN | -f FILE] [FILE... ]
-A num
num必须是正整体或0,即:同时显示匹配行向下的num行,例如:grep -A 3 ‘dog’ FILE同时显示匹配行的向下3行
-B num
num必须是正整体或0,即:同时显示匹配行向上的num行,例如:grep -B 3 ‘dog’ FILE同时显示匹配行的向上3行
-num
num必须是正整体或0,即:同时显示匹配行上下的num行,例如:grep -3 pattern filename同时显示匹配行的上下3行
--color=WHEN
--colour=WHEN
WHEN必须是:auto、always、never三个中的其中一个,表示搜索到的关健字以颜色方式显示
-r,-R,--recurse,-d recurse
如果FILE字段给的是一个目录,那么以递归的方式对该目录下的所有文件进行匹配搜索关健字(即:将遍历目录下的所有子目录中的文件);如果FILE字段给的是一个文件,那么就只对文件进行匹配搜索关健字
-E
即:使用egrep指令(作用:使用Extended Regular Expression)
-F
即:使用fgrep指令(作用:匹配搜索关健字时,将关健字中的元字符都按普通字符来匹配搜索,不使用Regular Expression)
-G
即:使用Basic Regular Expression
-P
即:使用Perl Regular Expression
-H
在匹配到的行的开头,追加上该行所在的文件的文件名(即:打印文件名)
-b,--byte-offset
显示匹配到的行之前的所有内容所占的字节大小(单位为bytes),例如:grep -b ‘dog’ filename,即:显示含有dog的行之前的那些行的内容所占的字节大小
-c,--count
只打印匹配的行数,不显示匹配的内容
-f File,--file=File
把模板(pattern)写在一个文件里,然后使用-f参数来读取这些pattern,如果文件中包含0个pattern,那么什么都不匹配;如果有多个pattern,那么必须一行写一个pattern,即:pattern一般是带有regular expression的表达式
-h,-- no-filename
当搜索多个文件时,不显示匹配文件名前缀
-i,--ignore-case
忽略大小写差别
-q,--quiet
取消显示,只返回退出状态;0则表示找到了匹配的行
-l,--files-with-matches
打印匹配pattern的文件清单,例如:grep –L 'bug' /etc/animal /etc/ruanxi /etc/grub.conf,那么如果只有/etc/animal文件中的内容匹配pattern('bug'),那么使用-l参数就只显示匹配的文件清单:/etc/animal
-L,--files-without-match
打印不匹配pattern的文件清单,例如:grep –L 'bug' /etc/animal /etc/ruanxi /etc/grub.conf,那么如果只有/etc/animal文件中的内容匹配pattern(即:'bug'),那么使用-L参数就显示不匹配的文件清单:/etc/ruanxi、/etc/grub.conf
-n,--line-number
在匹配的行前面显示行号
-s,--no-messages
不显示关于不存在或者无法读取文件的错误信息
-v,--revert-match
反检索,只显示不匹配的行
-w,--word-regexp
如果被\<和\>引用,就把表达式做为一个单词搜索
-o,--only-matching
显示满足匹配的字符串,例如下面这个例子
root@monitor:~# cat -n file
1 how are you today?
2 i don't know
3 what can i do for you?
4 nice to meet you
root@monitor:~# cat file | grep -n -o meet
4:meet
- grep 和 egrep fgrep
- grep , egrep ,fgrep
- grep、egrep、fgrep命令
- grep,fgrep,egrep
- grep、egrep、fgrep命令
- grep、egrep、fgrep命令
- grep、fgrep、egrep区别
- grep、egrep、fgrep
- grep、fgrep 和 egrep 命令
- 6. redhat grep、egrep、fgrep
- shell编程grep/egrep/fgrep
- linux中的grep|egrep|fgrep
- grep,egrep和fgrep的区别
- 正则表达式(grep,egrep,fgrep)
- grep,egrep和fgrep的区别
- grep,egrep和fgrep的区别
- grep,egrep和fgrep的区别
- grep, egrep, fgrep的man帮助手册
- C++ 线程安全的单例模式
- 隐马尔可夫模型(HMM)攻略
- Android判断当前网络是否可用
- linux:Superblock mount time is in the future
- 推荐引擎初探
- grep,fgrep,egrep
- C++与java多态的区别(转)
- 调整系统的inode数量
- j2me,我不准备深入了
- 你可能不知道的5个功能强大的 HTML5 API
- Asp.net MVC3部署问题-不能加载System.Web.Helpers的解决方案
- 缓冲流
- js对象 javascript 中的 e -- window.event 对象详细介绍
- iOS 关于Objective-C方法的IMP