grep 命令
grep (globalsearch regular expression(RE) and print out theline,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
基本的正则表达式 |
||
符号 |
意义 |
例子 |
* |
0个或者多个在*字符之前的那个普通字符 |
hel*o>hello,helllllo,helo |
. |
匹配任意字符 |
.73 |
^ |
匹配行首,或者后面字符的非 |
^cloud>以cloud开始的行 |
$ |
匹配行尾 ^$表示空行 |
micky$>以micky结尾的行 |
[] |
匹配字符集合 |
[a-z]>所有小写,[A-Z]>所有的大写字母,[0123456789]=[0-9],-表示从左边到右边 |
\ |
转义符,屏蔽一个元字符的特殊意义 |
|
\<\> |
精确匹配符号 |
\<the\>精确匹配the这个单词 |
\{n\} |
匹配前面字符出现n次 |
JO\{3\}重复字符O3次 |
\{n,\} |
匹配前面字符至少出现n次 |
JO\{3,\}重复字符O至少3次 |
\{n,m\} |
匹配前面字符出现n-m次 |
JO\{3,6\}重复字符O3-6次 |
拓展的正则表达式 |
||
符号 |
意义 |
例子 |
? |
匹配0个或者1个在其之前的普通的字符 |
JO?B>JOB,JOOB |
+ |
匹配1个或者多个在其之前的普通的字符 |
S+EU>SSEU,SEEEU,SSSSSEU |
() |
表示一个字符集合或用在expr中 |
re(a|e|o)d表示从a,e,o中选择一个 |
| |
表示“或”,匹配一组可选的字符 |
|可以作为或使用,但是一般备用于管道符用法 |
bash shell本身不支持正则表达式,使用正则表达式的是shell命令和工具,如grep,sed,awk
但是bashshell 可以使用正则表达式中的一些字符实现通配功能,常用的通配符号有?,*,{},[]
grep 的格式一般为:
grep [选项】【模式】 【文件……】
grep的命令可以是字符串,可以是变量还可以是正则表达式,只要模式中包含空格则需要使用“”
grep 命令选项与意义 |
||
选项 |
意义 |
例子 |
-c |
只输出匹配行的数量 |
grep -c Certificate *.pem |
-i |
搜索时忽略大小写 |
grep -i certificate *.pem |
-h |
查询多个文件是不显示文件名 |
|
-l |
只列出符哈匹配的文件名,而不列出具体的匹配行 |
|
-n |
列出所有的匹配行,并显示行号 |
|
-s |
不显示不存在或者无匹配文本的错误信息 |
|
-v |
显示不包含匹配文本的所有行 |
|
-w |
匹配整词 |
|
-x |
匹配整行 |
|
-r |
递归搜索,不仅搜索当前的工作目录,而且搜索子目录 |
|
-q |
禁止输出任何结果,以退出状态表示搜索是否成功 |
|
-b |
打印匹配行距文件头部的偏移量,以字节为单位 |
|
-0 |
与-b选项结合使用,打印匹配的词距文件头部的偏移量,以字节为单位 |
|
-E |
支持拓展的正则表达式 |
|
-F |
不支持正则表达式,按照字符串的字面意思进行匹配 |
|