文章目录

  • ​​1.重要的文本处理工具​​
  • ​​2.正则表达式元字符​​
  • ​​3.扩展正则表达四元字符​​
  • ​​4.前导符总结:*,?,+,{}​​
  • ​​5.POSIX字符类​​
  • ​​5.正则匹配eg:vim​​

1.重要的文本处理工具

  • 对文本处理的:vim,sed,对文本进行过滤和截取的awk,以及grep都会用到正则
  • 正则表达式:
    正则表达式regular expression,RE,是一种字符模式,用于在查找过程中匹配的指定的字符。
    在大多数的程序里,正则表达式都被置于两个正斜线之间,eg:/[oO]ve/就是由正斜杠界定的正则表达式 ,它将匹配被查找的行中任何位置出现的相同模式
    在正则表达式中,元字符是最重要的概念
  • eg:
匹配数字: ^[0-9]+$   
123
##[]范围中的一个数字,+表示前面的对象出现1次或者多次

匹配Mail
[a-z0-9_]+@[a-z0-9]+\.[a-z]+
jiwangreal@163.com
##\.这里的\表示转义,.的意思类似于shell中的?,表示任意单个字符

匹配IP
[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
##[0-9]{1,3}表示数字0-9出现1-3次数

2.正则表达式元字符

  • 基本表达式的元字符,注意里面有[ ],( ),{ }
    .*是匹配多个字符,匹配任意一行

    eg1:grep ‘^\ <root\ >’ /etc/passwd 表示以root开头的单词

    eg2:
grep '^root' /etc/passwd    表示以root开头的
grep '^[rc]oot' /etc/passwd 表示以r或者c开头的
grep '^[^rc]oot' /etc/passwd 表示不以r或者c开头的

^在[]里面表示取反,不要
^在[]外面表示以谁开头


\转移字符会让这些元字符失去作用,让其还回原意。
love\. 表示只匹配love.

\(..\)在vim里面用的多:
:% s/10.16.130.1/172.16.130.5/ 表示将172.16.130.1替换成172.16.130.5
:% s/\(172.16.130.\)1/\15/ 表示将172.16.130.1替换成172.16.130.5,其中\1代表\(172.16.130.\)的内容
:3,9s/\(.*\)/#\1/ 表示将3-9行给注释掉

eg3:下面第一个表示o出现2次

(9.1)正则表达式RE_元字符

  • shell里面不区分大小写:ll l[a-z]ve

3.扩展正则表达四元字符

  • egrep支持扩展元字符,grep不支持扩展元字符

eg:ss -an|egrep ‘:80|:20\ >’

(9.1)正则表达式RE_vim_02

4.前导符总结:*,?,+,{}

  • 下面的符号都是对前面的符号负责,用红色已经标记出来了,后面的表示匹配的次数

5.POSIX字符类

(9.1)正则表达式RE_正则表达式_03

5.正则匹配eg:vim

/love/    匹配love
/^love/ 匹配以love开头的行
/love$/ 匹配love结尾的行
/l.ve/ 匹配l任意字符ve
/lo*ve/ 匹配l零到多个o可能没有o的ve
/[Li]ove/ 匹配Love或love
/love[a-z]/ 匹配love后面跟着小写字母
/love[^a-zA-Z0-9]/ 匹配love非字符

/.*/ 匹配整行,匹配任意一行
/^$/ 匹配空行
/^[A-Z]..$/ 注意这里匹配的是3个字符
/^[A-Z][a-z]*3[0-5]/ 匹配A-Z开头的,零到任意多个的a-z字符的,再接着跟着3以及0-5字符
/[a-z]*\./ 匹配零到多个小写字母,后面跟着.
/^ *[A-Z][a-z][a-z]$/ 匹配零到多个空格开头的,跟着[A-Z][a-z][a-z]结尾的行
/^[A-Za-z]*[^,][A-Za-z]*$/ 匹配零到多个英文字母开头,跟着一个非逗号,再跟着一个字母结尾的
/\<fourth\>/ 匹配fourth
/\<f.*th\>/ 匹配以f开头,th结尾的单词
/5{2}2{3}\./ 匹配5出现2次

空行,即换行符和回车
/^$/
/^[ \t]*$/ 零个或多个空格或tab

注释行
/^#/
/^[ \t]*#/