正则表达式详解和案例
正则表达式是通过一些特殊符号的排列,用以查找、替换、删除一行或者多行文字字符串。对于程序来说,更加重要的用途是验证字段的合法性。本文介绍Linux和常用程序的正则表达式的使用。 一、Linux中grep工具的介绍和简单使用 grep [option] ‘正则’ filename -i :忽略要匹配内容的大小写 -n:输出匹配到行的行号 -o:仅显示匹配的字串,而非字串所在的行 -E:支持使用扩展正则表达式 如:匹配/etc/test.txt中含有test的字符串 greptest/etc/test/txt 如:匹配/etc/passwd下含有root这个字符串信息的用户信息,并显示匹配到的信息所在的行 [root@MyTesting/]#grep-nroot/etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin 二、基本的正则表达式匹配 (1)特殊符号表示正则,如下常用匹配内容。 Linux中所支持的匹配 [[:digit:]] 代表数字0-9 [[:lower:]] 代表小写字母a-z [[:upper:]] 代表大写字母A-Z [[:space:]] 代表空格,包括tab [[:punct:]] 代表标点符号 [[:alpha:]] 代表任何英文字母,a-z和A-Z [[:alnum:]] 代表任何英文字母和数字 常用编程语言所支持的匹配 d 代表数字0-9 D 代表非数字0-9 w 代表任何英文字母和数字,包括下划线 W 代表非任何英文字母和数字,包括下划线 s 代表任何空白字符 S 代表非空白字符 b 代表单词的边界 B 代表非单词的边界 n 代表一个换行符 r 代表一个回车符 例如: 把/etc/passwd下的含有大写字母的行列出来 grep --color '[[:upper:]]' /etc/passwd (2)特俗符号匹配 1、字符匹配 []:表示范围内的匹配,如匹配0-9范围,则可表示为[0-9] .:表示任意单个字符 2、次数匹配 *:表示任意长度次数的匹配,.*则表示任意长度的任意字符,可以匹配任何内容 如: grep--color'r.*t'/etc/passwd ?:匹配0次或者1次 如: grep--color't?'/etc/passwd 有没有匹配到t的行都显示出来 +:匹配一次以上 如: grep--color't+'/etc/passwd
只有匹配到有t的行才会被显示出来
{m}:精确匹配m次,如{2},精确匹配2次 {m,n}:至少匹配m次,至多匹配n次,如{1-10},出现1-10次都会被匹配到 {m,}:匹配m次以上,如{3,},出现3次以上才会被匹配到 {0,n}:至多匹配n次,如{0,3},出现3次以下的才会被匹配到 如:匹配 /etc/passwd中,出现4位数字以上的行 grep--color'[[:digit:]]{4,}'/etc/passwd
(3)位置锚定 ^:匹配首部 $:匹配尾部 &;:匹配单词开始,可以用b代替 &;:匹配单词结束,可以用b代替 ^$:匹配空白行
如:匹配 /etc/passwd中,首部出现root的行 grep--color'^root'/etc/passwd
(4)分组 ():表示分组 如:匹配 /etc/passwd中,用户为root或者bin的行 grep--color'^(root|bin)'/etc/passwd
(5)后项引用 后项引用是指引用分组里面匹配到的内容。 如第一个括号分组匹配到的内容,用1表示 如:匹配/etc/passwd中开头为root,之后又出现root的行。 grep-E--color'^(root).*1'/etc/passwd
三、扩展正则表达式 扩展正则表达式跟基本表达式差不多,基本匹配语法为: grep -E ‘正则’ filename 或者 egrep ‘正则’ filename
所支持元字符如下: .:表示任意字符 []:表示符合中括号内的范围字符 [^]:表示匹配非中括号范围内的字符 *:表示匹配任意次 ?:表示匹配0次或1次 +:表示至少匹配1次 {m}:表示精确匹配m次 {m,n}:表示至少匹配m次,至多匹配n次 {m,}:表示匹配m次或以上 {0,n}:表示最多匹配n次 ^:表示开头匹配 $:表示结尾匹配 &;,b:表示匹配开头单词 &;,b:表示匹配结尾单词 ^$,^[[:space:]]*$:表示匹配空白字符 ():表示匹配分组,匹配括号内的整个字符串内容 1,2,3:表示引用分组分别为第1,2,3个的内容 四、常用正则表达式匹配 (1)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行 grep-o-E"&;[[:alnum:]]+&;()"/etc/rc.d/init.d/functions (2)使用echo命令输出一个路径,而后使用grep取出其基名。如/etc/sysconfig,取基名则为sysconfig echo'/etc/sysconfig/'|grep-o-E"[[:alnum:]]+/?$"|cut-d/-f1 (3)找出ifconfig命令结果中的1-255之间的数字 ifconfig|grep-o-E"[[:digit:]]|[[:digit:]][[:digit:]]|2[0-4][[:digit:]]|25[[:digit:]]
(4)写一个模式,能匹配合理的ipv4地址 ifconfig|grep-o-E"([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-3][0-9]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |