Linux基础知识---Shell编程之正则表达式

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.的字符(串)。

   

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值