grep命令详解与正则表达式

grep命令主要是做什么的呢 ?下面我们就来研究下。 grep命令简单来说就是“过滤”。就是把想看的数据通过grep过滤出来,把不想看的通过grep过滤掉。

它是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,Unix的grep家族包括(egrep,fgrep,grep)。egrep和fgrep的命令跟grep有所不同,egrep是grep的扩展,支持更多的re元字符,fgrep表示就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说正则表达式中的元字符表示自身的意思,不再特殊,linux使用的GNU版本的grep本身就强大,可以通过-G,-E,-F 命令行来选项egrep和fgrep的功能。
选项:
-A#--after表示后#行
-B#--before表示前#行
-C#--context表示“前后”各#行
-D--devices设置对设备,FIFO,管道的操作,读取,跳过
-E--extended-regexp扩展正则表达式egrep
-F--fixed-strings一个换行符分隔的字符串的集合fgrep
-G--basic-regexp基本正则
-H--with-filename当搜索多个文件,显示匹配的文件名前缀
-I不匹配二进制的东西
-L--files-without--math匹配多个文件时,显示不匹配的文件名
-P-----perl-regexp调用的perl正则

-R/-r--recursive递归调用
-V--version显示版本信息
-U--binary使用标志高亮匹配字符串
小写选项:
-a--text不要忽略二进制数据
-b--byte-offset打印匹配行前面答应该行所在的块行码
-c--count显示匹配的行数

-d--directories目录操作,读取,递归跳过

-e--regexp指定字符串作为查找文件内容范本样式
-f---file从文件中获得匹配模式
-h--no--filename当搜索多个文件,不显示文件名的前缀
-i--ignore-case不区分大小写
-l--files-with-matches匹配多个文件时,显示匹配的文件名
-n--line-number显示的内容加上行号

-q--quiet,--silent不显示任何东西
-s--no-messages不显示错误信息

-v--invert-match显示不匹配的行
-w--word-regexp匹配整个单词
-x--line-regexp匹配整行
-y此选项跟-i选项相同
-o--only-matching只显示一行中匹配PATTERN的数据
-m--max-count匹配的最大数

*注:单词由字母,数字,下划线组成
正则表达式:^表示以^grep开头的行
$表示行尾锚定,用于模式的最右侧
.表示任意单个字符
*匹配前面的字符任意次
.*任意长度字符
[]匹配指定的范围内的内容
[^]匹配不在范围的内容
\(..\)标记匹配字符,如\(love\) ,love被标记为1
\<锚定单词的开始,即词首锚定,用于单词模式的开始
\>锚定单词的词尾,即词尾锚定,用于单词模式的结束,锁定单词的结束
\{n\}匹配前面的字符n次
\{,n\}匹配前面的字符至多n次, <=n
\{m,n\}匹配前面的字符至少m次,最多n次
\{n,\}匹配前面的字符至少n次, 最多无限次
\+匹配前面的字符出现最少1次, 即:肯定有且>=1次
\?匹配前面的字符出现0次或1次,即:可有可无
^$空行
^[[:space:]]*$空白行
^PATTERN$用于模式匹配整行
\匹配整个单词
\|或者
()将多个字符捆绑在一起,当作一个整体处理
后向引用:\(string\string2\)\)
1\:string\(string2\)
2\:string2

【grep命令详解与正则表达式】

    推荐阅读