您的位置:首页 > 运维架构 > Linux

Linux通配符与正则表达式

2016-11-11 08:20 253 查看
一、 基本概念

1. 什么是通配符:具有特殊含义的符号。

2. 什么是正则表达式:一种用来进行字符串查找、匹配、分割、替换的语法规则。

二、基本符号

1. 通配符的基本符号有: *, ?, [], [-], [^].其中,*表示匹配零个或多个字符;?表示匹配任意一个字符; []中是一串字符,比如[abcdefg],表示匹配括号中的任意一个字符,也就是要么匹配a,要么匹配b,要么匹配c等等;[-]中是一个字符范围,比如0到9就写成[0-9],所有小写字母就写成 [a-z],这个通配符表达的是括号中字符范围内的任意一个字符,比如[0-9]匹配的是任意一个数字字符,[a-z]匹配的是任意一个小写字母。如果加上字符’^’,表达的意思是“取反“,比如说[^0-9],这个通配符表达的是匹配任意一个非数字的字符。

2. 正则表达式的基本符号(又称元字符):*, .(点号), ^, $, [], [^], \, \{n}, \{n,}, \{n,m}.

*: 元字的*与通配符的*意思不同,它表达的是匹配前一个字符重复0次或多次的字符串。比如正则表达式ba*, 它会匹配的字符串有b, ba, baa, baaa, 等等。。

.(点号): 表示匹配除了换行符之外的任意一个字符,与通配符的\?相似。

^: 代表字符串首位置。比如正则表达式”^abc”,表达的含义是匹配字符串首为abc的字符串。

$: 代表字符串尾位置。比如正则表达式”abc$”,表达的含义是匹配字符串尾为abc的字符串。

[]: 与通配符的[](中括号)有相同的含义。表达匹配有某一范围字符的字符串。

[^]: 字符’^’在中括号内部表示取反,若在中括号外部表示字符串首位置。

\: 转义字符,将有特殊功能的字符弱化为一般字符。比如.(点号字符表示匹配任意字符),如果我想匹配.字符,我的正则表达式应为”\.”,即通过转义字符将有特殊功能的.号字符去特殊化为普通.字符。

\{n\}: 因为{是特殊字符,所以需要通过转义字符将{去特殊化为普通字符才能使用。这个元字符的含义是匹配{前的字符重复n次的字符串。比如:a\{3\},表达的含义是匹配a字符重复三次的字符串。

\{n,\}: 表达的是匹配{前的字符重复多于n次的字符串,还是这个例子a\{3,\},中间多了一个,号,表示匹配字符a重复多于3次的字符串(包括3次)。

\{n, m\}: 表达的是匹配{前的字符重复n到m次的字符串。比如a\{3, 5\},表达的含义是匹配字符a重复了3到5次的字符串(包括3次和5次)。

三、通配符和正则表达式的区别

1. 用途不同:通配符用来匹配文件名,而正则表达式用来匹配文件中的内容。

2. 范围不同:通配符是完全匹配,而正则表达式是包含匹配。什么是完全匹配:就是通配符有多长,匹配的字符串又多长,比如通配符”???”表达的是匹配长度为3个字符的字符串,结果就只会匹配3个字符长度的字符串,通配符和结果匹配度完全一样。什么叫包含匹配:就是元符号知识匹配结果中的一部分,比如正则表达式”…”,表达的是匹配字符串中有3个字符的字符串,结果就会匹配所有字符个数多于3个字符的字符串,也就是说,结果字符串只包含了正则表达式。

3. 命令不同:一般用通配符的命令是find, ls, cp等(操作的是文件名),而用正则表达式的命令是:grep, awk, sed等(操作的是文件内容)。

总结:首先总结了通配符和正则表达式的基本概念,介绍了通配符和正则表达式的基本符号,最后比较了两者之间的区别。

若有不妥之处,敬请指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息