十一、shell编程-正则表达式(1)

1.名词解析

  正则表达式RE是一种字符模式,用于查找过程中匹配指定的字符。

  在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式。

  它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符串是最重要的概念。

 

2.工具

  被vim、sed、awk、grep调用

 

3.场景

  mysql、oracle、python、apache、nginx……需要正则

4.示例

  需求

    匹配数字的脚本:用户输入创建账号的数量

  

 

  

 

  但是我们无法判断用户在输入数量时候是数字而不是其他符号。这里就能用到正则。

  

   这里的意思是以0-9开头且至少有一个为结尾

  

 

5.正则表达式-元字符-基本型

  基本正则表达式元字符

 

  ^  行首定位符

  

 

  $  行尾定位符

  

 

  

 

  .  匹配任意单个字符

  

 

  

 

  *  匹配前导符0到多次  *只修饰前面不修饰后面,如果前面没有内容则无效

  

 

  

 

   .*  任意多个字符

  

 

   如果要搜.*的话,要带双引号".*",否则会把程序下的所有文件都搜出来,因为.*会被shell掳走,变成过滤该路径下的所有文件和love.txt文件的内容

  

  []  匹配指定范围内的一个字符

  

 

 

  [-]  匹配指定范围内的有一个字符或连续的范围

  

 

  [^]  匹配不在指定组内的字符,取反

  

 

 

   \  用来转移元字符 ('' "" \),脱意符

  \是转义后一个字符,包括回车

  

  \<  词首定位符  和^不一样

  

  

 

 

   \>  词尾定位符

  

 

  

 

 

 

  s///  替换  s/原来/现在/

  示例:把文件中的do换成da

  

  这里的g是全局的意思,否则每一行只替换第一个

  

 

 

  ()  匹配搜后使用的字符的标签

  示例1:需要在3到9行加注释

  

 

  

 

  思路是

  :3,9 s///  3到9行开始替换

  :3,9 s/(.*)/\1/  (.*)代表需要替换的是所有字符,\1代表引用前面的所有内容

  :3,9 s/(.*)/#\1/  在前面原文基础上加上#井号

  :3,9 s/\(.*\)/#\1/  给括号加上转义符

  

  示例2:如果要让井号换到每行的结尾处

  

 

  把#单独括起来为\1,其他内容括起来为\2,替换成\2\1

 

  示例3:把3-9行的井号#去掉

  

 

  把以井号结尾的除了#的内容括起开为\1,改为只有\1

 

  x\{m\}  字符x重复出现m次

  

 

  

 

 

  x\{m,\}  字符x重复出现m次以上

  

 

 

  x\{m,n\}  字符x重复出现m到n次

  

 

posted @ 2022-02-19 00:39  真渡  阅读(56)  评论(0)    收藏  举报