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

shell脚本编程学习笔记(2)正则表达式

2015-01-15 10:36 330 查看
编写shell脚本时经常用到的基本操作就是寻找包含特定文本的行,虽然用简单的grep命令可以完成一些简单的工作,但是正则表达式无疑是绕不开的。本文主要介绍基本正则表达式。

总的来说,正则表达式由两部分组成:一般字符和特殊字符。特殊字符(meta)在正则表达式中往往具有特殊的意义。

先介绍几个简单的特殊字符:

(1) . 代表任意的单个字符

(2) * 匹配在它之前的任意数目的单个字符

(3) ^ 匹配其后面紧接着的正则表达式在行起始处

(4) $ 匹配其前面的正则表达式在行末尾

(5) [] 匹配方括号里面的任意一个字符

举几个例子:

表达式 tolstoy 匹配位于一行上任何位置的7个字母:tolstoy

表达式 ^tolstoy 匹配tolstoy出现在行首的行。比如:tolstoyabc defghi jkl

表达式 tolstoy$ 匹配tolstoy出现在行首的行。比如:abc defghi jkltolstoy

表达式 ^tolstoy$ 匹配正好为tolstoy的行,没有其他字母。

表达式 [Tt]olstoy 匹配在一行上的任意位居中,含有Tolstoy或者tolstoy的行

表达式
tol.toy 匹配在一行上的任意位居中,含有tol这3个字母,加上任何一个字符,再接着toy这3个字母。

表达式
tol.*toy 匹配在一行的任意位居中,含有tol这3个字幕,加上任意个(0或多个)字符,再加上toy这3个字母。

另外,可以用[:
:]的方式表达某些字符集。

比如[:alnum:]表示数字字符,[:alpha:]表示字母字符,[:lower:]表示小写字母字符,[:upper:]表示大写字母字符等等。

使用的时候,比如表达式
ab[[:alnum:]]cd 匹配包含ab这2个字符,接着一个任意数字,再接着cd字符的行,比如ab1cd,ab3cd等等。注意有两个方括号。为什么呢?请看看方括号特殊字符的意义。

后向引用:匹配正则表达式前面的部分。意思就是对一个正则表达式的某一部分做个标记,后面用数字代替。举个例子。 表达式 \(ab\)\(cd\)[def]*\2\1 匹配含有abcd接着def中间的任意0个或多个再接cdab,比如abcdcdab、abcdeeecdab,abcdddeeffcdab等等。这里的 \(ab\)就是对ab做个标记,这是第一个标记,\(cd\)是第二个标记,后面的\2就是指的cd,也就是第二个标记,\1也就是指的ab。

区间表达式:能匹配出现一定次数的某个字符。其格式是将一个或两个数字放在\{与\}之间。

\{n\} 表示前置正则表达式所得结果重现n次

\{n,\} 表示前置正则表达式所得结果重现至少n次

\{n,m\}表示前置正则表达式所得结果重现n至m次

比如说a\{5\} 表示重现5个a,q\{10,42\}表示重现10到42个q。

上面就是基本正则表达式的基础知识,对于一些更加详细的内容,可以查看相应的资料。除了基本正则表达式之外,还有扩展正则表达式。另外还有sed、awk等程序对文本进行替换等。暂时消化不了那么多,先到这里吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: