一、grep工具的使用
1、概念
grep: 是 linux 系统中的一个强大的文本搜索工具,可以按照 正则表达式 搜索文本,并把匹配到的行打印出来(匹配到的内容标红)。
2、语法
grep [options]...... pattern [file]......
工作方式: grep 在一个或者多个文件中搜索字符串模板,如果模板中包括空格,需要使用引号引起来,模板后的所有字符串会被看作是文件名。
**工作结果:**如果模板搜索成功,则返回 0 状态码;如果搜索不成功,则返回 1 状态码;如果搜索的文件不存在,则返回2 的状态码。我们可以利用这些返回状态码进行一些自动化的 shell 脚本处理工作。
3、相关选项
选项 | 说明 |
---|---|
-i | 忽略大小写 |
-e | 实现多个选项间的逻辑或关系 |
-E | 如果pattern是扩展正则表达式,需要使用-E选项,grep -E = egrep |
-n | 显示行号 |
-w | 按单词匹配 |
-o | 只显示匹配到的内容 |
-v | 不显示匹配到的行 |
-c | 统计匹配的 |
4、相关使用
-i、-E、-e(使用扩展正则表达式时必须加 -E 选项):
两种表达方式:忽略大小写匹配ab或c;
-w:
grep单独匹配字符串与加-w选项后匹配字符串的区别;
-o:
只显示匹配到的内容;
-v:
实现反选;
-c:
统计匹配到的行数;与wc -l 效果相同;
-r:
递归查询;
-rl:
递归查询问及那,只显示匹配到内容的文件名字;
二、正则表达式
1、背景
在进行程序设计的过程中,用户处理某些文本,需要查找符合某些比较复杂规则的字符串,使用正则表达式则会以非常简短的代码完成。
2、概念
正则表达式:通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串的表达式,简单来说,就是用在字符串的处理上的一项表达式。由于正则表达式语法简练,功能强大得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等。
3、分类
- 基本正则表达式
- 扩展正则表达式
(1)基本正则表达式
①概念
基本正则表达式(Basic Regular Expression,BRE) ,又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX 规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式。
②相关选项
元字符 | 说明 |
---|---|
^ | 以某个字符开头 |
$ | 以某个字符结尾 |
. | 匹配任意单字符 |
* | 对前一项进行0次或者多次重复匹配 |
{m,n} | 将前一项字符重复m-n次,{m, } , {, n} , {m} |
[ ] | 对方括号内的单字符进行匹配 |
[^] | 不匹配方括号内的单字符 |
^[ ] | 匹配以某个字符开头的行 |
\ | 转义字符,让一些特殊符号失效 |
() | 定义一个子表达式 |
词首【\<或\b】和词尾锚定【\>或\b】 | 其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作为单词尾部出现 |
③相关使用
^:
$:
. :
.. :
匹配任意两个字符;
* :
------正则表达式中的 * 与其他命令中的 * 区分开
Ⅰ、正则表达式中,对前一项字符进行0次或者多次重复匹配------使用时,*前必须加需要匹配的字符;
Ⅱ、其他命令中,匹配任意字符;
{m, n}:
grep -E (不用转义字符);不用则需要转义;
{,n}:最少0次,没有的都匹配;
[ ]:
一个一个进行匹配;
另一种写法(了解);
[^]:
不匹配单括号中的字符,只匹配有符号的行(空格也算)
^[]:
匹配以[ ]中内容开头的行;
不匹配以方括号中开头的行;
**():**定义一个子表达式
\1------是子表达式,这里的\1表示匹配red字符,第三条命令表示匹配首尾相同(都是red),中间任意的字符(包括空格);
第一条命令的子表达式\1是.*,完整命令表示首尾、中间都匹配任意字符;
第二条命令的子表达式\1是. ,完整的命令表示匹配首尾都相同的任意单字符,中间任意的字符;
\<或\b:
\>或者\b:
(2)扩展正则表达式
①概念
扩展正则表达式(Extended Regular Expression,ERE) 支持比基本正则表达式更多的元字符,但是扩 展正则表达式对有些基本正则表达式所支持的元字符并不支持。
前面介绍的元字符 "^"、"$"、"."、"*"、"[]"以及"[^]" 这 6 个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。
②新增的元字符
元字符 | 说明 |
---|---|
? | 将前一项字符进行0次或者1次的重复匹配 |
+ | 将前一项进行1次或者多次的重复匹配 |
(|) | 匹配 | 符号左边或者右边的字符 |
只有加了-r的才可以跟目录,否则跟只能文件