1,什么是正则表达式?

  简单来说就是用正则表达式语言创建的,进行文本内容的匹配、查找特定字符串或替换工作,对文本操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”通常我们就称为正则表达式.


2,正则表达式的应用场景?

  用来进行文本内容的查找,或进行替换,适合文本文件查找替换的内容量比较大且有相同规则的字符串


3,给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

     a. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);


     b. 可以通过正则表达式,从字符串中获取我们想要的特定部分。


4,正则表达式特点:

     a. 灵活性、逻辑性和功能性非常的强;


     b. 可以用非常简单的方式达到字符串的复杂控制。


     c. 比较难理解掌握


5,正则表达式的组成:

主要有普通字符和元字符组成的一组有规则的字符组合形成。其中普通字符就是一些数字,大小写字母,而元字符则是在正则表达式中,规定了的代表特殊含义的字符,称为元字符。元字符,不表示字符本身的意义,用于额外功能性的描述。


6,下面介绍grep工具:

grep :Global search Regular Expression(RE) and Print out the line

(全局搜索正则表达式并把行打印出来)

正则表达式主要有:

grep 基本正则表达式

egrep 扩展正则表达式

fgrep 固定字串正则表达式


其中:

egrep:Extended grep 扩展的grep

fgrep:fixed-strings grep 固定字串的grep


注:以下内容将主要介绍grep的使用,egrep,fgrep本文未涉及

使用格式:grep [options] 'pattern'  file......

其中[options]有以下几个常用选项:

--color=auto:查找到的字串以红色显示,为显示方便,通常事先定义别名:

       alias grep=‘grep --color=auto’,让匹配查找到的内容以红色字体显示

-o --only-matching:仅显示查找到的字符串,而非此字符串所在的行一并显示出来

-q --quiet、--silent:(do not write anything to standard output)

   匹配到的内容不在屏幕显示,通常用于条件判断,是否查找到,并执行后续程序

-i --ignore-case:以忽略字符大小写形式匹配正则表达式

-c --count:只输出匹配行的计数。

-n --line-number:显示匹配行及 行号。

-v --invert-match:反向显示不能被模式所匹配到的行;

-V:显示grep命令的版本

-help 查看grep 命令的使用帮助


7,介绍正则表达式的常见查找(匹配)类型:

以下事例使用到的文本文件为file.txt,其内容为:

a1

b

ab

a b

bA

a2b

a.b

a?b

xyxy

x

y

xyy

xay

baba

33bb

xxyyyyxx


字符匹配

.:任意单个字符

例子:x.y表示:xxy,xby,x?y

[]:指定范围内的任意单个字符

其中[]有以下几个表达方式

[0-9]=[[:digit:]] :任意单个数字

[a-z]=[[:lower:]] :任意单个小写字母

[A-Z]=[[:upper:]] :任意单个大写字母

[[:alpha:]]:任意单个英文大小写字母

[[:alnum:]]:任意单个数字或英文大小写字母

[[:space:]]:空白字符

[[:punct:]]:任意标点符号

具体事例及详解

grep "a[0-9]" file.txt

结果:

a1

a2b


grep "b[a-z]" file.txt

结果:

baba

33bb


grep "b[A-Z]" file.txt

结果:

bA


grep "a[[:alpha:]]" file.txt

结果:

ab

xay

baba


grep "a[[:alnum:]]b" file.txt

结果:

a2b


grep "a[[:space:]]b" file.txt

结果:

a b


grep "a[[:punct:]]b" file.txt

结果:

a.b

a*b



[^]:

   指定范围外的任意单个字符

grep "[^0-9]x" file.txt

结果:

xyxy

xxyy

xxyyyyxx



次数匹配:

   用来指定匹配其前面的字符的次数


*:任意次

grep "[[:lower:]]*y" file.txt

结果:

xyxy

y

xxyy

xay

xxyyyyxx


.*:匹配其前面任意长度的任意字符

   如:a.*b:ab,aaab,aab,abbbbb

\?:0次或1次

grep "x\?y" file.txt

结果:

xyxy

y

xxyy

xay

xxyyyyxx


注:在正则表达式中,会尽可能长的去匹配字符并显示出来,同时也称为正则表达式的贪婪模式匹配。


\{m\}:匹配m次

grep "a\{1\}b" file.txt

结果:

ab

baba


\{m,n\}:m次到n次

a\{1,3\}b:ab,aab,aaab

grep "a\{1,2\}b" file.txt

结果:

ab

baba


\{m,\}:至少m次

grep "b\{2,\}" file.txt

结果:

33bb


\{0,n\}:至多n次

a\{0,2\}b:b,ab,aab

grep "x\{0,2\}y" file.txt

结果:

xyxy

y

xyy

xay

xxyyyyxx


位置锚定:用于指定字符出现的位置

^:锚定行首

grep "^ab" file.txt

   结果:

        ab


$锚定行尾

b$:ab,aab,xb

grep "bb$" file.txt

结果:

   33bb


^$:空白行

grep "^x$" file.txt

   结果:

   x


\

grep "\

结果:

a1

ab

a b

a2b

a.b

a?b


str\>:锚定词尾

grep "b\>" file.txt

结果:

b

ab

a b

a2b

a.b

a?b

33bb


分组:\(\)

grep "[[:digit:]]\(bb\)" file.txt

结果:

       33bb


引用:


\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配的内容


grep '[Tt].*[Rr]' passwd


grep '[Tt][^[:punct:]].*[Rr]' passwd


grep 常用选项


-A #:after 匹配到行和下#行


-B #: before 匹配到行和上#行


-C #: context上下文 匹配到行和上下#行