正则表达式与扩展正则表达式 一、正则表达式 1、什么是正则表达式? 了解正则表达式之前我们首先来说一下什么是正正则表达式?正则表达式简单来说就是处理字符串的方法,再通俗一点来说就是:他是以行为单位来进行字符串的处理。正则表达式基上是一种表示方法,如果程序工具能表示这种方法,那该程序工具就可以处理正则表达式的字符串。正则表示法的字符串表示方法也有不同,分为:基础正则表达式(Basic REGEXP)与延伸正则表达式(Extended REGEXP),延伸正则表达式不仅可以表示一些简单的组字符串处理,还可以处理群组字符串。 2、正则表达式:Regular EXPression,REGEXP:里面有一些元字符,很可能并不不表示它身的意义,表示通配的意义。在这里还要知道模式是什么?模式(Pattern)就是由字符或正则表达式的元字符组合起来,过滤文本的条件。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是使计算机更加智能化的重要途径和手段。 3、正则表达式的特点是: (1) 灵活性、逻辑性和功能性非常的强; (2) 可以迅速地用极简单的方式达到字符串的复杂控制。 4、正则表达式是由元字符和普通字符组成: 普通字符:包括大小写的字母和数字 二、基本正则表达式 1、元字符: .:匹配任意单个字符 (grep 'r..' /etc/passwd) []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 字符集,使用时需加[]:[:digit:],[:lower:],[:upper:],[:space:],[;alnum:] 2、匹配次数:(贪婪模式下,尽可能长的匹配) .:匹配任意单个字符 (grep 'r..' /etc/passwd) *:匹配其前面的字符任意次(a*b :n个a后跟个b) .*:任意长度的任意字符(a.*b:以a开头b结尾grep ’a.*b‘ test.txt) ?:匹配其前面的字符一次或0次,表示可有可无 {m,n}:匹配其前面的字符至少m次,至多n次 {1,}:至少一次 3、位置锚定: ^:锚定行首,此字符串后面的内容必须出现在行首 grep ’^r..t' /etc/passwd :出现在行首 $:锚定行尾,此字符串前面的内容必须出现在行尾 grep ‘y$' /etc/passwd:以Y结尾的字符 ^$:空白行 grep ’^$' /etc/passwd &;或b:其后面的任意字符必须作为单词的首部出现grep ”&;root" test.txt &;或b:其前面的任意字符必须作为单词的尾部出现grep "root&;" test.txt &;root&; :以整个单词出现 grep ”&;root&;" test.txt 4、分组: (): (ab)*:ab可以出现任意次, 后向引用: 1:第一个左括号以及与之对应的右括号所包含的所有内容 2:第二个左括号以及与之对应的右括号所包含的所有内容 3:第三个左括号以及与之对应的右括号所包含的所有内容 5、grep :默认使用基本正则表达式定义的模式来过滤文本的命令 全面搜索正则表达式,根据模式,搜索文本,并将符合模式的文本行显示出来 --color : grep --color ‘root' /etc/passwd(显示颜色) -i:不区分大小写 -v:被模式匹配的行不显示,显示不能匹配的行 -o:只显示被模式匹配的字符串 -E:使用在扩展正则表达式 -A 数字:当每一行匹配后还会显示下面的内容(grep -A 2 ’^core id ' /proc/cpuinfo) -B 数字:当每一行匹配后还会显示前面的内容(grep -B 2 ’^core id ' /proc/cpuinfo) -C 数字:当每一行匹配后还会上下都显示你指定的行数(grep -C 2 ’^core id ' /proc/cpuinfo) 三、扩展正则表达式:默认工作在贪婪模式下 1、字符匹配: .:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 2、次数匹配: *:匹配其前面的字符任意次(a*b :n个a后跟个b) ?:匹配其前字符0次或1次 +:匹配其前面的字符至少1次 {m,n}:匹配其前面的字符至少m次至多n次(与基本正则表达式不同,需注意) 3、位置锚定:(与正则表达式一样) ^:锚定行首,此字符串后面的内容必须出现在行首 grep ’^r..t' /etc/passwd :出现在行首 $:锚定行尾,此字符串前面的内容必须出现在行尾 grep ‘y$' /etc/passwd:以Y结尾的字符 ^$:空白行 &;或b:其后面的任意字符必须作为单词的首部出现 &;或b:其前面的任意字符必须作为单词的尾部出现 &;root&; :以整个单词出现 4、分组: ():分组,在扩展正则表达式中才真正实现了分组的意义 1,2,3 或者:|=or a|b:a或者b C|cat:C或者cat grep -E ’C|cat‘ 文件名 grep-E’(C|c)at' 文件名: grep -E '^[[:space:]]+' 文件名:至少一个空白符开头 注意 grep -E 是egrep! . :逃逸符,让一个元字符表示它本身的意义,而不是元字符的意义 grep默认模式下是基本正则表达式的命令,而egrep则是扩展正则表达式的命令 fgrep :运行速度快,因为他不搜索正则表达式,不支持正则表达式,如果在搜索文本时不打算使用元字符,就使用fgrep,运行速度快。 例题 1、找出/boot/grub/grub.conf文件中1-255之间的数字 egrep '&;([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;' /boot/grub/grub.conf
结果:

2、查找ABC类IP地址 ifconfig | egrep --color '&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])&;(.&;([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;){2}.&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])&;' IPV4: 5类:ABC A:1-127 B:128-191 C:192-223
结果:
 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|