bash shell学习-正则表达式

正则表达式(Regular Expression, RE)是对字符串操作的一种逻辑公式,就是用一些事先定义好的特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑《bash shell学习-正则表达式》

一、正则表达式基础

1、什么是正则表达式

正则表达式(Regular Expression, RE)是对字符串操作的一种逻辑公式,就是用一些事先定义好的特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

2、为什么要学习正则表达式

由于其强大的字符串处理能力,目前许多工具和编程语言都支持正则表达式,熟练掌握它可以帮助我们更高效的完成工作

3、语系对正则表达式的影响

由于不同的语系其编码顺序不一样,导致正则表达式的匹配结果可能不一样,所以在使用之前应该先确认当前的语系,也可以使用下面这些特殊符号来避免不同语系带来的问题:

特殊符号 代表意义
[:alnum:] 英文大小写字母及数字,即0-9,A-Z,a-z
[:alpha:] 英文大小写字母,A-Z,a-z
[:blank:] 空格与Tab
[:cntrl:] 控制按键,CR,LF,Tab,Del等
[:digit:] 数字,0-9
[:graph:] 除了空格和Tab外的所有按键
[:lower:] 小写字母,a-z
[:print:] 可被打印出来的字符
[:punct:] 标点符号,即 “,’,?,!,;,:,#,$
[:upper:] 大写字母,A-Z
[:space:] 任何会产生空白的字符,包括空格键[Tab] CR等
[:xdigit:] 十六进制的数字类型,包括0-9,A-F,a-f

 

4、基础正则表达式字符

RE字符 意义与范例
^word 意义:以word开头

范例:查找以’#’开头的那一行

grep -n ‘^#’ filename

word$ 意义:以word结尾

范例:查找以’!’结尾的那一行

grep -n ‘!$’ filename

. 意义:代表一定有一个任意字符的字符

范例:查找包含字符’a’并且’a’后面至少有一个字符的那一行

grep -n ‘a.’ filename

\ 意义:转义字符,将特殊符号的特殊意义去除

范例:查找包含单引号的那一行

grep -n \’ filename

* 意义:重复零到无穷多个的前一个字符

范例:查找包含(es)(ess)(esss)等字符串所在的行

grep -n ‘ess*’ filename

[list] 意义:list中的任意一个字符都可以被匹配

范例:查找包含’get’或者’got’的行

grep -n ‘g[eo]t’ filename

[n1-n2] 意义:n1-n2范围内的任意一个字符都可以被匹配

范例:查找包含数字的那一行

grep -n ‘[0-9]’ filename

[^list] 意义:不包含在list中的其他任意一个字符

范例:查找不包含大写字母的那一行

grep -n ‘[^A-Z]’ filename

\{n,m\} 意义:连续n到m个的前一个字符,若为\{n\}则是连续n个前一个字符,

\{n,\}为连续n到无穷多个前一个字符

范例:查找包含’goog’或者’gooog’的那一行

grep -n ‘go\{2,3\}g’ filename

 

5、扩展正则表达式

扩展正则表达式可以通过组合功能,将多次查找变为一次查找,使用 grep -E 或者 egrep 来支持扩展正则表达式

6、扩展正则表达式字符与范例

RE字符 意义与范例
+ 意义:重复一个或一个以上的前一个RE字符

范例:查找(god)(good)(goood)等的字符串

egrep -n ‘go+d’ filename

? 意义:零个或一个的前一个RE字符

范例:查找(gd)(god)这两个字符串

egrep -n ‘go?d’ filename

| 意义:用‘或’的方式找出满足不同条件的字符串

范例:查找包含’gd’或’good’或’dog’的字符串

egrep -n ‘gd|good|dog’ filename

() 意义:找出‘组’字符串

范例:查找包含(glad)或(good)的字符串

egrep -n ‘g(la|oo)d’ filename

()+ 意义:多个重复组的判别

范例:查找’A’开头’C’结尾,并且’A’和’C’之间包含一个以上的’xyz’的字符串

egrep -n ‘A(xyz)+C’ filename

 

二、使用正则表达式的工具

1、sed工具

sed是一种以行为单位,对数据进行替换、删除、新增、选取特定行等操作的工具,同时也支持管道

范例:

推荐阅读sed简明教程

2、awk工具

awk是一种优良的文本处理工具,支持正则表达式和管道,经常用于将一行分成数个‘字段’来处理

处理流程:

①读入第一行,并将第一行的数据填入$0,$1,…等变量当中;

②依据条件类型的限制,判断是否要进行后面的动作;

③做完所有动作与条件类型;

④重复①~③,直到处理完所有数据;

范例:

假设有一个文件名为pay.txt,内容如下:

如果我要计算每一个人的总额,并且按照一定的格式打印出来,那么可以这样:

其中的printf的用法和C语言中的差不多,输出的结果类似这样:

推荐阅读AWK 简明教程

 

三、其他工具

1、文件比较工具:?diff、cmp、patch

2、文件打印准备:?pr

 

总结:正则表达式真的是一种非常有用的工具,由简单的规则可以搭配出复杂的字符串,不过伴随着高效率的往往是高难度,需要以后不断的使用才能逐渐掌握

转自: ———— http://www.cnblogs.com/autyinjing/ ————

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注