文本处理正则表达式:grep
正则表达式
正则表达式(regular expression),简写RE。正则表达式就是能用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成的字符串。
主要分为两类:
基本正则表达式:BRE
拓展正则表达式:ERE
简单的说,正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让使用者轻易达到搜寻、删除、取代某特定字符串的处理程序。例如vim、grep、find、awk、sed等命令都支持正则表达式。
grep的意义
**grep:**global search regular expression and print out the line.
作用:文本搜索工具。根据用户指定的“模式”(过滤条件)对目标文本行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写的过滤条件。
grep的用法总结
(1)字符匹配
.:匹配单个字符。
[]:匹配范围内的任意单个字符。
[^]:匹配范围外的任意单个字符。
(2)匹配次数
1:匹配前面的字符0次或一次,意味着可有可无。表示:?
2:匹配前面的字符0次或任意次。表示:*
3:匹配任意长度的任意字符。表示:.*
4:匹配前面的字符1次或任意次,意味着至少一次。表示:+
5{n}:匹配其前面的字符n次;
6{n,m}:匹配其前面的字符至少n次,至多m次;
7{0,n}:匹配前面的字符至多n次;
8{m,}:匹配前面的字符至少m次。
**由于显示问题进行如下补充:**1.问号前面有个反斜杠。4.加号前面有个反斜杠。5-8.需要在花括号的前面加上反斜杠进行转译。
(3)位置限定
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^$:空白行;
^pattern$:用于pattern来匹配整行;
<或\b:词首锚定,用于单词模式的左侧;
\b或>:词尾锚定,用于单词模式的右侧;
(4)其他特殊的posix字符
\w:匹配字母、数字和下划线等于[A-Za-z0-9]
\W:匹配非字母、非数字和非下划线[^A-Za-z0-9]
\n:匹配一个换行符
\r:匹配一个回车符
\t:匹配一个制表符
\s:匹配任何空白字符
\S:匹配任何非空白字符
[[:alnum:]]:文字数字字符(除去符号之外,数字、字母都可以包括中文)
[[:alpha:]]:文字字符(字母,包括中文)
[[:digit:]]:数字字符(阿拉伯数字)
[[:graph:]]:非空字符(不包括空格、tab键)
[[:print:]]:非空字符(包括空格,但不包括tab键)
[[:lower:]]:小写字符
[[:upper:]]:大写字符
[[:cntrl:]]:控制字符
[[:punct:]]:标点符号(包括常用符号)
[[:space:]]:所有空白字符(空行、空格、制表符)
[[:xdigit:]]:十六进制数(0-9,a-f,A-F)
grep演示示例
首先创建一个文本文件,内容如下:
good good study day day up
10086
10086+1
I remember that day she got married
三个空格
三个tab建
Good afternoon everyone
you are a good man
Study hard for your future
How are you?
yuwenkedaibiao
I’m fine,thanks
go TO bed
are you ok?
It’s been a long day without you my friend
You jump ,I jump!
one day ,'your girl will go '. Just because you have noting.
“you cried to me,‘fairy tales are deceptive’”
\\\\\
//////////
()()()()()
++++++++
“how do you do”
(1)搜索含有thanks的行。
(2)搜索以Good开头的行。
(3)搜索一个包含od的行,d字母可有可无,不限次数。
(4)搜索一个词,该词以y或Y开头。
(5)搜索含有单引号的行
(6)搜索一些行,该行包括某个单词,并满足以下条件:
第一个字符可以是Y或y
第二个字符可以是o或者没有
第三个字符可以是任意字符
第四个字符匹配前一个字符,0次或任意次
(7)匹配以大写字母开头的行
(8)匹配包含数字的行
(9)搜索精确匹配到含有day的单词的行
(10)搜索包含are you ok这一行
(11)搜索以字母g开头包含两个o以上的单词
(12)使用拓展正则表达式,搜索g和d之间至少有一个o的行
(13)搜索++++++++的行
(14)搜索\或者////的行
(15)搜索带有双引号的行(注意:双引号需要转译加反斜杠)
(16)搜索双引号里带有单引号的行
(17)搜索空白字符行(注意:这里空白字符包括空格、空行、tab键、制表符)
(18)搜索非空白字符行,并统计有多少行(注意:graph搜索,认为空白包括空格、空行、tab键;print搜索,认为空白包括空行、tab键,并不包括空格)
(19)搜索带有标点符号的行
(20)搜索以y开头中间肯定有字符末尾是o的行,并显示出上下两行的内容