正则表达式
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。前两天博主学习了一些关于正则表达式的知识,当时感觉还晕晕的。所以在这里总结了一些常用的内容,希望与大家一起学习。
首先介绍一下什么是grep,它是文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。本文就利用grep这个工具来说明正则表达式的用法。
(一)基本正则表达式:
一、字符匹配:
1、 . 匹配任意单个字符
2、 [] 匹配指定范围内的任意单个字符
3、 [^] 匹配指定范围外的任意单个字符
4、 [:alnum:] 或 [0-9a-zA-Z] 匹配任意大小写字母和数字
使用如[:alnum:]此类的通配符时,需在其外面再加一对[]。
5、 [:alpha:] 或 [a-zA-Z] 匹配任意大小写字母
6、 [:upper:] 或 [A-Z] 匹配任意大写字母
7、 [:lower:] 或 [a-z] 匹配任意小写字母
8、 [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
9、 [:digit:] 十进制数字 或[0-9] 匹配任意数字
10、 [:punct:] 标点符号
二、匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数。
1、 * 匹配前面字符任意次,包括0次。贪婪模式:尽可能多的匹配
2、 .* 任意长度的任意字符
3、 \? 匹配其前面的字符0次或1次
4、 \+ 匹配其前面的字符至少1次
5、 \{n\} 匹配前面的字符n次
6、 \{\m,n\} 匹配前面的字符至少m次,至多n次
7、 \{,n\} 匹配前面的字符至多n次
8、 \{n,\} 匹配前面的字符至少n次
三、位置锚定:定位出现的位置
1、 ^ 行首锚定,用于模式的最左侧
2、 $ 行尾锚定,用于模式的最右侧
3、 ^PATTERN$ 用于模式匹配整行
4、 ^$ 空行
表示开头和结尾连在一起,自然而然就是空行。
5、 ^[[:space:]]*$空白行
表示以空白字符开头,中间匹配任意次空白字符,又是以空白字符结尾,自然就是空白行
6、 \<或\b 词首锚定,用于单词模式的左侧
7、 \>或\b 词尾锚定,用于单词模式的右侧
8、 \<PATTERN\> 匹配整个单词
四、分组及引用:
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理。
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中,这些变量的命名方式为\1,\2,\3.....
\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例: \(string1\+\(string2\)*\)
\1:string1\+\(string2\)*
\2:string2
后向引用:引用前面的分组括号中的模式所匹配字符,而不是模式本身。比如:匹配/file中的字符前边有ro,后边也有ro的行:
(二)扩展的正则表达式:
egrep = grep -E
扩展的正则表达式与基本正则表达式的元字符用法一样;而在进行次数匹配时,扩展的正则表达式中的? + {n} {m,n} 不用再加上\ ,在分组中()也不用加上\ ,其他的都一样,就不再详细举例,用几个实例来说明一下。
1、显示三个用户root、wang的用户名,UID和默认shell
cat /etc/passwd|grep -E "^(root|wang)\>"|cut -d : -f1,3,7
^(root|wang)\> 表示行首为root或者wang的行
cut -d : -f1,3,7 表示取出以:为间隔的第1,3,7行
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
cat /etc/rc.d/init.d/functions | grep -E "^.*\(\)"
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo /etc/rc.d/init.d/functions | egrep -o "[^/]*$"
以上就是博主要跟大家分享的一些关于正则表达式的内容,如有不足之处,希望大家多多交流。