第七章、正则表达式
文本搜索工具—grep
grep
(Global search REgular expression and Print out the line.)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。
grep [option...] 'pattern' [FILENAME]
参数
-n :显示行号
-o :只显示匹配的内容
-q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
-l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
-A :如果匹配成功,则将匹配行及其后n行一起打印出来
-B :如果匹配成功,则将匹配行及其前n行一起打印出来
-C :如果匹配成功,则将匹配行及其前后n行一起打印出来
--color
-c :如果匹配成功,则将匹配到的行数打印出来
-E :等于egrep,扩展
-i :忽略大小写
-v :取反,不匹配
-w:匹配单词
-x 仅选择与整行完全匹配的匹配项。精确匹配每行内容(包括行首行尾看不到的空格内容)
-R -r以递归方式读取每目录下的文件
指定过滤器
--exclude-dir= 指定过滤目录,排除目录顾虑选择
[root@node1 ~]# grep -rl 'aaa' /path --exclude-dir=2 (注:直接写子路径)
--exclude-from=file指定过滤器文件,通过文件内容指定要排除的文件名
7.1 什么是正则表达式
所谓正则表达式,实际上就是用来描述某些字符串匹配规则的工具。由于正则表达式语法简练,功能强大,得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等。对于初学者来说,首次接触正则表达式非常难以接受,本节将介绍正则表达式的入门知识,以利于后面几节的学习。
7.2 为什么使用正则表达式
在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成。
7.3基本正则表达式
基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式,将在随后介绍。
元字符 | 说明 |
---|---|
^ | 以某个字符开头 |
$ | 以某个字符结尾 |
. | 匹配任意单字符 |
* | 对前一项进行0次或者多次重复匹配;匹配前一个字符任意次 .* : 匹配任意字符任意次 |
[] | 对方括号内的单字符进行匹配 [a-z] [0-9] [[::]] |
[^] | 不匹配方括号内的单字符 |
1 | 匹配以某个字符开头的行 |
\b | <或\b:锚定词首(支持vi和grep)其后面的任意字符必须作为单词首部出现;>或\b:锚定词尾 |
\s \S | 匹配任何空白字符,包括空格、制表符(\t )、换行符(\n )、回车符(\r )、换页 |