先了解下基础概念:字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。vim、grep、awk 、sed 等工具都支持正则表达式,本文介绍如何使用grep及egrep命令。而扩展正则表达式比基本正则表达式拥有更强大的功能。
简介
grep的主要功能用于检索文件内容,字符串等的工具。可以根据用户指定的“模式(pattern)”对目标文本进行搜索过滤,显示出被“模式pattern”匹配到的行。
其基本语法是:
grep [OPTIONS]PATTERN [FILE...]
PATTERN:是文本字符和正则表达式的元字符组合而成的匹配条件,可用单引号‘ ’将pattern括起来以避免shell通配的影响,强引用不替换而显示字符本身。" " 双引号,字符串中的` ` ,$, \ 等特殊字符会被shell解释替换后,再传递给grep。对普通的字符串(没有特殊字符和空格的字符串)也可以不加引号,直接搜索。
OPTIONS:(这里给出常用的选项)
-i 忽略大小写
-c 显示被匹配到的行数
-n 输出行号
-v 反向选择,即找没有搜索字符串的行
-o 仅显示匹配到的内容
-w 匹配单词
-A # 连同匹配行的下#行一并显示,#代表任意数字
-B # 连同匹配行的上#行一并显示,#代表任意数字
-C # 连同匹配行的上下#行一并显示,#代表任意数字
-R或-r 递归搜索目录或子目录下匹配的字所在文件(可配合find命令
-E 相当于egrep 支持扩展的正则表达式
-F 相当于fgrep 不支持正则表达式
--color对匹配的内容以颜色显示
-V 显示grep版本
grep中不太常用的选项:
-P, --perl-regexp PATTERN 是一个 Perl 正则表达式
-q取消显示,只返回退出状态。0则表示找到了匹配的行;找不到返回1,搜索的文件不存在返回2
-h --no-filename #在显示符合样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename #在显示符合样式的那一列之前,表示该列所属的文件名称。(默认方式)
-L:输出时只显示不包含匹配项的文件名,通常与-r选项连用来查找带指定内容的文件。
-l:输出时只显示包含匹配项的文件名。
正则表达式: 默认匹配次数:贪婪模式,尽可能多的去匹配
. 匹配任意单个字符
\.表示.本身 \逃逸符
* 匹配其前面的字符任意次可为0次
.* 任意长度的任意字符
\? 匹配其前面字符1次或0次
x\{m\}:匹配其前面的字符“x”m次(精确匹配)
x\{m,\}:匹配其前面的字符“x”至少m次
x\{m,n\}:匹配其前面的字符“x”至少m次,至多n次
\{1,\} 1次至无上限 \{0,3\}至少3次
^ 锚定行首,此字符后面的任意内容必须出现在行首
$ 锚定行尾,次字符前面的任意内容必须出现在行尾
^$表示空行
[ ] 匹配指定范围内的任意单个字符
[^ ] 匹配指定范围外的任意单个字符
\< 其后面的任意字符必须作为单词的首部出现 \b
\> 其前面的任意字符必须作为单词的尾部出现 \b
\<\> 锚定单词例如 \<root\>
纯数字 [[:digit:]]或[0-9]
小写字母 [[:lower:]]或[a-z]
大写字母 [[:upper:]]或[A-Z]
大小写字母 [[:alpha:]]或[a-zA-Z]
数字加字母 [[:alnum:]]或[0-9a-zA-Z]
空白字符 [[:space:]] 非空白字符[^[:space:]]
标点符号 [[:punct:]]
\d 匹配任何十进制数,相当于[0-9] -P选项加上
\D 匹配任何非数字字符,相当于[^0-9] -P选项加上
\s 匹配任何空白字符,
\S 匹配任何非空白字符,
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
\\ 匹配"\"