shell脚本编程之正则表达式(一)(基础正则表达式,grep)

  

壳脚本编程之正则表达式(一)

  

一、前言

  

?本文主要讲述外壳正则表达式的主要概念和常用“三剑客”之一的grep命令

  

二,正则表达式的定义

  

?正则表达式:或称正规表达式,常规表达式。是使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,即通过一些特殊符号实现快速查找,删除,替换某个特定字符串。由普通字符和元字符组成的文字模式。

  

?普通字符:如大小写字母,数字,标点符号以及一些其他符号

  

?元字符:具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

  

?<强> 当然这些概念未免太过抽象而且枯燥、下面的实例或许可以有助于您理解这些抽象的概念。

  

正则表达式包括:

  
      <李>基础正则表达式——grep与sed支持   <李>扩展正则表达式——egrep与awk支持   
  

三,正则表达式的作用

  

系统管理员常用,且是必备技能之一。有助于快速定位重要信息,解决相关问题。

  

四,正则表达式示例

  

下面结合实例细讲grep命令在正则表达式的作用与使用格式方法,从而引出基本正则表达式所包含的元字符的含义。

  

grep命令   

      <李> - n -显示行号   <李>————忽略大小写李   <李> - v -反向查找李   
  
 <代码类=" language-shell "> [root@lokott选择]#猫测试。txt//测试文本内容
  他又矮又胖。
  他穿着一身蓝色的马球衬衫和黑色的裤子。
  足球之家> [root@lokott选择]# grep - n的测试。txt//显示行号检索含有该的行
  4:舌无骨却能折断bones.12 !
  5:谷歌搜索关键字是最好的工具。
  6:未来一年将考验我们的政治体制限制。
  
  [root@lokott选择]# grep镍的测试。txt//显示行号,不区分大小写检索含有该的行
  3:足球的故乡> [root@lokott选择]# grep - n“sh (io) rt”测试。txt//检索包含衬衫或者短的行
  1:他又短又胖。
  2:他穿着一身蓝色的马球衬衫和黑色的裤子。
  [root@lokott选择]# grep - n“oo”测试。txt//重复字符检索
  3:足球的故乡> [root@lokott选择]# grep - n ' ^ '测试。txt//检索以开的头的行
  4:舌无骨却能折断bones.12 !
  [root@lokott选择]# grep - n ' ^ [a - z]的测试。txt//检索以小写字母开头的行
  1:他又短又胖。
  4:舌无骨却能折断bones.12 !
  8:木头十字架!
  [root@lokott选择]# grep - n ' ^ (a-zA-Z)的测试。txt//检索以字母开头的行
  1:他又短又胖。
  2:他穿着一身蓝色的马球衬衫和黑色的裤子。
  3:足球的故乡> root@lokott选择# grep - n ' \。美元的测试。txt//检索以点“。”结尾的行
  1:他又短又胖。
  3:足球的故乡> [root@lokott选择]# grep - n ' w . .d '测试。txt//检索w和d之间可以是任意两个字符的行
  5:谷歌搜索关键字是最好的工具。
  8:木头十字架!
  9:事实胜于雄辩
  [root@lokott选择]# grep - n“我们* d”测试。txt//检索w和d之间o出现0次或者多次的行
  8:木头十字架!
  12:# woood #
  13:# woooooood #
  [root@lokott选择]# grep - n已坏* d测试。txt//检索第三个o出现0次或者多次的行
  8:木头十字架!
  12:# woood #
  13:# woooooood #
  [root@lokott选择]# grep - n ' w。* d '测试。txt//检索w与d之间可有可无的字符的行
  1:他又短又胖。
  5:谷歌搜索关键字是最好的工具。
  8:木头十字架!
  9:事实胜于雄辩
  12:# woood #
  13:# woooooood #
  [root@lokott选择]# grep - n[0 - 9][0 - 9] *的测试。txt//检索任意数字所在的行
  4:舌无骨却能折断bones.12 !
  7:π=3.141592653589793238462643383249901429
   
  

5)查找连续字符范围“{}”

  

?{}主要作用是为了限制一个范围内重复的字符串,例如查找3 - 5个点的连续字符即可需要使用{},但是由于在shell中其有特定意义,所以需要利用转义字符“\”,将“{}”字符转换成普通字符。

  
 <代码类=" language-shell "> [root@lokott选择]# grep - n o \ \{2}的测试。txt//检索连续两个字符“o”的行
  3:在BBC体育在线足球的故乡。
  5:谷歌搜索关键字是最好的工具。
  8:木头十字架!
  12:# woood #
  13:# woooooood #
  15:我敢打赌,这个地方真是令人毛骨悚然的深夜!
  [root@lokott选择]# grep - n '我们\ d{2、5 \}”测试。txt//检索以w开d结头尾o出现2 - 5次的行
  8:木头十字架!
  12:# woood #
  [root@lokott选择]# grep - n '我们\ d{2 \}”测试。txt//检索w开d结头尾o出现2次以上的行
  8:木头十字架!
  12:# woood #
  13:# woooooood #
  

shell脚本编程之正则表达式(一)(基础正则表达式,grep)