正则表达式 (Regular Expression)

1.基本认识

正则表达式就是处理字符串的方法,它以行为单位,来进行字符串的处理行为,透过一些特殊符号的辅助,可以让使用者轻易地达到 “查找/替换” 某特定字符串的处理程序。

正则表达式基本上是一种表示法,只要工具程序支持这种表示方法,那么该工具程序就可以用来作为正则表达式的字符处理之用。一些常用的工具比如说vi,grep,awk,sed等等

正则表达式和shell是linux基础中的基础,但也是最难的部分,学好它们之后,后面的学习之路就会更加顺畅了

2.正则表达式的用途

对于系统管理员来说,系统产生的信息太多,不能一条条看,通过正则表达式,可以轻松筛选出需要查看的信息,使管理系统变得容易。

除此之外,正则表达式还有强大的字符串处理功能,比如通过比对字符串,从而删除一些垃圾信息和广告。

3.基础正则表达式

正则表达式其实是处理字符串的一个标准表示方式。先看一个最简单的字符串选取功能的工具程序,grep。

grep的功能就是进行字符串数据的比对,然后将符合要求的字符串打印出来,但是呢,grep是以整行为单位进行的,打印也是打印整行。

1)语法:grep [-acinv] '搜寻的字符串' filename 

//顺便说一下,方括号里面通常代表的是附加参数,可以不使用,使用的话加上减号,如果使用多于一个,那么举个例子就是 grep -vn 'sth' filename

-c 计算搜寻到的字符串的次数
-n 顺便打印出行号
-v 反向输出,就是说显示出没有搜寻字符串的行

2) 特殊符号的配合使用,这些东西都只是用来处理字符串的

a.  [ ]

举例:grep -n 't[ae]st' filename

方括号里面无论有多少字符,都只代表一个字符,但是意思是可以从这么多里面进行选择,比如搜到的结果有可能包括  test,taste

b.  ^

举例:grep -n '[^g]oo' filename

这个可以理解为否定的意思,也就是说,搜寻的关键字包含oo,但是oo的前面不能包含g

再举一些例子:grep -n '[^a-z]oo' filename    //oo前面不能是小写字母
                         grep -n '[0-9]' filename      //凡是带数字的都给找出来
        
注意:如果^符号放在方括号内,则表示反向选择,放在方括号外表示定位在行首              

c.   行首字符  ^ 

举例: grep -n '^the' filename  

这就意味着行首出现the的话,就给找出来

再举一些例子: grep -n '^[a-z]' filename          //行首是小写字母的都给找出来,注意和前面放在方括号中的比较
                         grep -n '^[^a-zA-Z]' filename     //稍微复杂一点,就是行首只要不是字母的,都给找出来

d.   行尾字符  $

举例:grep -n '\.$' filename    

意思是,以小数点 .  结尾的都给找出来

再举一些例子: grep -n '^$' filename    //这样做的目的就是找出空白行
                         grep -v '^$' filename | grep -v '^#'  //通过取反的形式,就吧空白行以及注释行全部给去掉了
                                                                                //其实使用 -v 意思就是删除不要那些东西


简单一句话可以解释这2个符号,就是说^表示它后面的第一个字符为行首字符,$表示它前面的第一个字符为行尾字符。所以‘^$’的意思就是行首就是行尾,那么就是什么都没有。

e.   任意一个字符  .

举例:grep -n 'g..d' filename

句点的意思就是说,一个句点代表一个字符.这样的话,比如good,glad这类的词就被找出来了。但是比如god就不行,因为在g和d之间只有一个字符。

f.    重复字符 *

举例: grep -n 'o*' filename

这个*的意思,其实得和前面的一个字符连起来,一共代表有0到无数个这个字母一样的字符。

那如果是ooo*就代表有2个或2个以上的o

那么如果想代表任意字符该怎么办呢? .*就解决了,比如说g.*g就代表g和g之间有0到任意数量的字符,甚至可能是一句话,比如 good mechanism  to develop program,就是说g开头,到prog结束。

举一些例子:grep -n '[0-9][0-9]*' filename          //代表含有任意数字的,都给选出来
                     grep -n 'g.*g' filename                   //代表在g和g之间有任意数量的字符的,都给选出来
                     grep -n 'g*g' filename                    //代表含有从1个到任意数量的g的,都给选出来


g.   限定连续正则表达式字符范围  {  }

做一个假设,假如我想找出两个到五个o的连续字符串,而不是2个到无穷个,该怎么办呢???

答案是使用那个表达式字符范围符号进行限制,有一个东西专门说明一下,就是右斜线,使用它的原因是因为花括号有特殊意义,所以用它来解除特殊意义

举例:grep -n 'o\{2\}' filename                       //有2个o的,找出来
          grep -n 'go\{2,5\}g' filename                //在g和g之间有2个到5个o的,找出来
          grep -n 'go\{2,\}g' filename                  //在g和g之间有大于等于2个o的,找出来






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值