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 | 不支持正则表达式,按照字符串的字面意思进行匹配 |
|