linux grep命令整理

1.做用
grep (global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgreplinux

egrep和 fgrep的命令只跟grep有很小不一样。egrep是grep的扩展,支持更多的re 元字符fgrep就是fixed grep或fast grep,它们把全部的字母都看做单词,也就是说, 正则表达式中的元字符表示回其自身的字面意义,再也不特殊。linux使用GNU版本的grep。它功能更强,能够经过-G、-E、-F命令行选项来使用egrep和 fgrep的功能。

 

grep的工做方式是这样的,它在一个或多个文件中搜索字符串模板。若是模板包括空格,则必须被引用,模板后的全部字符串被看做文件名。搜索的结果被送到屏幕,不影响原文件内容。

 

grep可用于shell 脚本,由于grep经过返回一个状态值来讲明搜索的状态,若是模板搜索成功,则返回0,若是搜索不成功,则返回1,若是搜索的文件不存在,则返回2。咱们利用这些返回值就可进行一些自动化的文本处理工做。

2.格式
grep [options]  pattern正则表达式

3.主要参数
[options]主要参数:shell

-?

 

同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

 

-a, –text

 

等价于匹配text,用于(Binary file (standard input) matches)报错

 

-b,–byte-offset

 

打印匹配行前面打印该行所在的块号码。

 

-c,–count

 

只打印匹配的行数,不显示匹配的内容。

 

-f File,–file=File

 

从文件中提取模板。空文件中包含0个模板,因此什么都不匹配。

 

-h,–no-filename

 

当搜索多个文件时,不显示匹配文件名前缀。

 

-i,–ignore-case

 

忽略大小写差异。

 

-q,–quiet

 

取消显示,只返回退出状态。0则表示找到了匹配的行。

 

-l,–files-with-matches

 

打印匹配模板的文件清单。

 

-L,–files-without-match

 

打印不匹配模板的文件清单。

 

-n,–line-number

 

在匹配的行前面打印行号。

 

-s,–silent

 

不显示关于不存在或者没法读取文件的 错误信息

 

-v,–revert-match

 

反检索,只显示不匹配的行。

 

-w,–word-regexp

 

若是被\<和\>引用,就把 表达式作为一个单词搜索。

 

-R, -r, –recursive

 

递归的读取目录下的全部文件,包括子目录。 好比 grep -R ‘pattern’ test会在 test 及其子目录下的全部文件中,匹配 pattern。

 

-V,–version

 

显示软件版本信息。

pattern正则表达式主要参数:less

\
忽略正则表达式中特殊字符的原有含义。
^
锚定行的开始 如:’^grep’匹配全部以grep开头的行。
$
锚定行的结束 如:’grep$’匹配全部以grep结尾的行。
.
匹配一个非换行符的字符如:’gr.p’匹配gr后接一个任意字符,而后是p。
*
匹配零个或多个先前字符 如:’ *grep’ (注意*前有空格)匹配全部零个或多个空格后紧跟grep的行,须要用egrep 或者grep带上 -E 选项。 .*一块儿用表明任意字符。
[]
匹配一个指定范围内的字符,如’[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
\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b
单词锁定符,如: ‘\bgrep\b’只匹配grep。[1]
用于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+匹配loveable或lovers,匹配一个或多个ov。
x{m},x{m,},x{m,n}
做用同x\{m\},x\{m,\},x\{m,n\}ide

 

4.grep命令使用简单实例
$ grep ‘test’ d*
显示全部以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示全部包含每一个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
若是west被匹配,则es就被存储到内存中,并标记为1,而后搜索任意个字符(.*),这些字符后面紧跟着 另一个es(\1),找到就显示该行。若是用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就能够了。工具

 

5.grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认状况下,’grep’只搜索当前目录。若是 此目录下有许多子目录,’grep’会以以下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
若是有不少 输出时,您能够经过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就能够更方便地阅读。ui

有一点要注意,您必需提供一个文件过滤方式(搜索所有文件的话用 *)。若是您忘了,’grep’会一直等着,直到该程序被中断。若是您遇到了这样的状况,按 <CTRL c> ,而后再试。命令行

下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认状况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。regexp

grep -n pattern files  便可显示行号信息htm

grep -c pattern files  便可查找总行数

这里还有些用于搜索的特殊符号: \< 和 \> 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、’manic’、’man’等, grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’, grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其余的字符串。 ‘^’:指匹配的字符串在行首, ‘$’:指匹配的字符串在行 尾,

相关文章
相关标签/搜索