1.正则表达式
1.1 查找单词,单词以a开头、t结尾的,命令为:$egrep "^a.*t$" words ;如果我们想在words文件中统计一共有多少个符合条件的单词,使用如下命令:$ egrep "^a.*t$" words | wc -w;
1.2 字符集和单词
在正则表达式中,“.”可以匹配除了换行符之外的字符,如 .at可以匹配“cat、sat、bat等字符串”
[a-z]at限定了at前面的那个字符只能是小写字母a到z中的任何一个。[ ] 用于指定一个字符集,无论“[ ]”中有多少个东西,只能匹配其中的一个字符。为了严格的匹配每一个字符,我们需要加上 “\<”和“\>”,如\<[a-z]
“ -”为连字符,描述一个范围,如,[a-zA-Z]用于匹配所有的英文字母。
1.3 字符类
除了字符集,POSIX风格的正则表达式还提供了预定义字符类来匹配。如 $ egrep "^[[:upper:]]t$" words 用于匹配所有以大写字母开头,以小写t开头的行。正则表达式“[[:upper]]”就是一个字符类,表示所有的大写字母,等价于[A-Z]。其他完整的POSIX 正则表达式中的字符类,请自行查找。
1.4位置匹配
字符“^”和”$“分别用来匹配行首和行尾。如,^a[a-z] t$用于匹配以a开头、t结尾、a和t之间包含一个小写字母的行。
1.5 字符转义
我们上面讲到字符”.“可以匹配除换行符以外的任意一个字符,那么如何匹配”.“字符呢,这时要用到转义字符"\"。如,www\.google\.cn用于匹配www.google.cn。
1.6 重复匹配
有时候我们希望某个字符不止一次的出现,这是我们可以用”*“来表示星号前面的字符应该出现0次或者多次。如,^a.*t$ 匹配所有以a开头、t结尾的行。
”+“和”?“分别用于匹配重复1次或者更多次,0次或者1次。如\<hi\>.+\<Jerry\>用于匹配hi后面隔了一个或几个字符后出现Jerry的行。
使用{}可以明确指定模式重复的次数。如{3}表示重复3次;{3, }重复3次或者更多次,{5,9}重复不少于5、不多于9次。如\<[1-9] [0-9]{7, }\>匹配所有不少于8位的数,因为第一位数不能为0。"^[0-9A-Za-z\\s]+$";可以匹配只能有字母、数字和空格组成的字符串。
元字符 | 描述 |
* | 重复0或者多次 |
+ | 重复1或者多次 |
? | 重复0或者多次 |
{n} | 重复n次 |
{n, } | 重复n或者等多次 |
{n,m} | 最少重复n次,最多重复m次 |
1.7 子表达式(又名分组)
(or){2. }匹配所有or重复2次或者更多次的行。如果去掉(),那么表示匹配字母o后面紧跟两个或者更多个字母r的行。
1.8 反义
有时候我们想匹配“除了这个字符,其他的什么都可以”,就要用到反义了。[^y],表示除了字母y的任何字符。[^aeiou]匹配除了字母a、e、i、o、u的所有字符,即匹配的行中不可以出现以上的5个字符中任一个。注意:^[^y]表示所以不宜y 开头的行。
1.9 分支
我们知道,正则表达式对用户提交的信息简单的执行“与”的组合。如^ht%,则匹配以h开头并且以t结尾的行。当我们需要一h开头或者以t结尾的行时,可以^h | t$来匹配。
Jan(uary| | \.)用于匹配January、Jan 或者Jan.的字符(串)。