Linux 工具箱

正则表达式


什么是正则表达式?正则表达式只是一个字符模板,用来在搜索中匹配相同的字符,在大多数程序中,正则表达式是括在正斜线中间的。例如,/love/就是一个以正斜杠为分割符的正则表达式,其中的模板love将用在搜索所有行中于它匹配的字符。

:1,$s/<[Tt]tom>/David/g

这行命令的意思是“从文件的第一行到文件的最后一行(1$)替换(s)单词Tom或者tomDavid”。gglobal)标志表示这个命令对全文有效。正则表达式元字符<>/分别界定单词的开始和结束。

正则表达式有两套字符集,一套是基本元字符集,另一套是扩展元字符集。

正则表达是的元字符集

元字符

功能

例子

匹配什么

^

锚定行的开始

/^love/

匹配所有以love开头的行

$

锚定行的结束

/love$/

匹配所有以love 结束的行

.

匹配一个字符

/l..e/

匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e

*

代表0个或多个先前字符

/*love/

匹配所有这样的行,有0个或多个空格,空格后跟着love

[]

匹配字符组中的一个字符

/[Ll]ove/

匹配所有包含love或者Love的行

[x-y]

匹配以字符范围组成的组中的一个字符

/[A-Z]ove/

匹配这样的行,这些行中包含如下字符,第一个字符是从AZ中间的一个,后面跟着ove

[^]

匹配一个不在范围内的字符

/[^A-Z]ove/

用来转义一个元字符

/love./

匹配所有这样的行,这些行包含如下字符:love后面跟着一个点。通常点是表示任何字符的通配符

许多使用RE元字符集的UNIX程序都支持附加元字符集。

<

锚定单词的开始

/

匹配所有这样的行,这些行包含以love开头的单词(vigrep支持这个功能)

>

锚定单词的结束

/love>/

匹配所有这样的行,这些行包含以love结束的单词(vigrep支持这个功能)

(..)

标记后面用到的匹配字符(传)

/(love)able1rs/

最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers

x{m}or

M次复制字符x

x{m,}or

至少m次复制字符x

x{m,n}

至少m次,至多n次复制字x

o{5,10}

匹配所有这样的行,包含的o的数量在510个之间。(vigrep支持这个功能)

几个例子:

/^[A-Z]..$/

需要在每一行中寻找的字符串是这样的:这个字符串是一行的开始且的第一个字符是一个大写字母,后面紧跟着两个任意字符,然后是新的一行。

/^[A-Z][a-z ]*[0-5]/

需要在每一行中寻找的字符串是这样的:这个字符串是一行的开始,第一个字符是一个大写字母,紧跟着0个和多个小写字母,然后是数字3,再后面是一个介于05之间的数字。

/[a-z]*./

0个和多个小写字母,后面紧跟着一个点号。

/^*[A-Z][a-z][a-z]$/

这个字符串是一行的开始,它首先是0个或者多个空格(注意,制表符不算是一个空格),然后是一个大写字母和两个小写字母,紧跟着是新的一行。

/^[A-Za-z]*[^,][A-Za-z]*$/

这个字符串是一行的开始,字符串的开头是0个或多个大写字母或(和)小写字母,紧跟着一个只要不是逗号的字符,然后是0个和多个大写字母或者小写字母,以及新的一行。

//

搜索的是所有包含单词fourth的行

//

搜索的字符串是这样的:以字母f开头,紧跟着0个或多个任意字符(.*),最终以th结束。

/5{2}2{3}./

首先是25,紧跟着是32,最后是一个点(.)。

请使用浏览器的分享功能分享到微信等