正则表达式分为两类
basic
reprxp 基本正则表达式;
extended reprxp 扩展正则表达式;
基本正则表达式和扩展正则表达式支持的元字符不一样
基本正则表达式
grep命令默认仅支持(basic reprxp)基本正则表达式,其全称为Galobl research
Regular Expression and Printing(全局搜索正则表达式)根据我们所指定的匹配条件去逐行的搜索某一个文件的文本,并且将匹配到我们指定条件的的文本显示出来,有时候简写为regexp,里边包含了很多的元字符(表示的不是本身的意思,而是某种通配的或者是次数匹配的等等额外的其它意义),正则表达式是由元字符组成的式子,里面包含的不只是元字符。
grep的用法
grep [options]
‘PATTERN’ file1......
grep的元字符:
. 匹配任意单个字符;
例:
* 匹配其前面的字符任意次;
例:编辑文本test,添加5行内容,分别为abc,abbc,a,ac,accccb;然
后查找包含ac、abc、abbc的行;
.*
匹配任意长度的任意字符,贪婪模式;
例如:grep “r.*t”
/etc/passwd
[] 指定范围内的任意单个字符;
举例:编辑test文本,内容包括abc、abbc、a、ac、accccb、Abc、
AaCd、Cat、ccccat、1234567、23456、18976下面我们来查找
包含a、b或c任意字母范围内的行;
查找包含a或A的行;
查找包含cat或Cat的行;
[^] 表示取反;仍以test文本为例;
查找包含除a、b、c字母范围外的行;
其中grep命令仍可以用到文件名通配中的下列选项;
[:digit:] 表示所有数字;
[:lower:]
表示所有小写字母;
[:upper:]
表示所有大写字母;
[:space:]
表示所有的空白字符;
[:alpha:]
表示所有的字母;
[:alnum:]
表示所有的字母和数字;
[:punct:]
表示所有的标点符号;
[0-9]
例:编辑test文本文件,增添内容1abc24567、23sdcv2、3dc341bc,456.908!
然后查找含有数字的行:
也可以这样查询:
查找含有小写字母的行:
也可以这样查询:
查找含有大写字母的行:
也可以这样查询:
查找含有空白字符的行:
查找含有字母的行:
也可以这样查询:
查找含有字母和数字的行;
也可以这样查询:
查找含有标点符号的行:
查找不包含纯数字的行:
X\{m,n\} 表示X字母至少出现m次,至多出现n次;
例:
X\{m,\} 表示X字母至少出现m次;
例:
X\{0,n\} 表示X字母至多出现n次;
例:
X\{m\} 表示X字母精确出现m次;
例:
\? 匹配其前面的字符0次或1次;
例:ab\?c:可以匹配abc,abbc,ac
锚定符:
^ 行首锚定符;
例:
$ 行尾锚定符;
例:
^$ 锚定空白行;
例:
\< 锚定词首,也可以用\b代替,放在字符前面;
例:
\> 锚定词尾,也可以用\b代替,放在字符后面;
例:
分组和后向引用:
\(\) 对字符分组引用;
\1,\2 后向引用 \1表示引用第一组括号中匹配到字符;\2表示引用第二组括号
中匹配到字符;例:编辑test文本,在test中添加三行,分别为:He love his
lover.和She like her
liker.和He love his
liker.
查找文本中love或like并且同一句中有与其相应加r的句子;
grep选项:
-v 对结果取反;
例:编辑test文本,并向文本中添加如下内容:
然后找出test文本中非空白行;
-i 忽略字母大小写;
例:
-o 仅显示匹配到的字串;
例:
-q 不输出任何信息;
例:
-A n 匹配的行的下面多显示一行;
例:
-B n 匹配的行的上面多显示一行;
例:
-C n
匹配的行的上下各多显示一行;
例:
Egrp或grep –E
扩展的正则表达式
扩展的正则表达式元字符:
. 匹配任意单个字符,与grep的用法基本相同;
例:
[] 指定范围内的任意单个字符,与grep的用法基本相同;
例:以test文本文件为例,查找包含a、b、c中任意一个字母的行:
* 匹配其前面的字符任意次,与grep的用法基本相同;
例:以test文本为例,然后查找包含ab*c的行;
?
匹配其前面的字符0次或1次;
例:ab?c 可以匹配abc,ac;
[^ ] 表示取反;
例:查找test文本中不同时包含abc的行;
$ 行尾锚定符;
例:
() 相当于正则表达式中的\(\) ,对字符分组引用,\1,\2为后向引用;
例:
{} 相当于正则表达式中的\{\};
X{m,n} 表示X字母至少出现m次,至多出现n次。例:
X{m,} 表示X字母至少出现m次;
例:
X{0,n} 表示X字母至多出现n次;
例:
X{m}
表示X字母精确出现m次;
例:
\< 锚定词首,
与grep的用法相同,这里不再举例说明;
\> 锚定词尾,
与grep的用法相同,这里不再举例说明;
+ 次数匹配,匹配其前的字符至少1次;
例:
| 或者,二选一;
例:(C|c)at=(Cat,cat),a|b(包含a或者b的行), C|cat=C或者cat
阅读(2134) | 评论(0) | 转发(1) |