(十)Shell与正则表达式

十、正则表达式

1. 匹配符

  • . 匹配除回车“\n”以外的任意字符
  • () 自定义字符串分组(a|b) a或b
  • [] 自定义一个匹配的字符 [0-9] [a-z]
  • [^] 自定义取反的一个匹配字符 [^0-9] 非数字
  • \ 转义字符

2. 限定符

  • * 某个字符之后加星号表示该字符不出现或出现多次 a*
  • ? 某个字符之后加问号表示该字符出现一次或不出现 最多1次
  • + 某个字符之后加加号表示该字符出现一次或多次,但必须出现1次
  • {n,m} 某个字符之后出现,表示该字符最少n次,最多m次
  • {m} 正好出现了m次

案例实操

  • 匹配以a开头,以c结尾的字符串
"^a.*c$"
  • 匹配以a或b开头,中间任意,c结尾的字符串
"^(a|b).*c$"
  • 匹配以a 开头,中间数字, c结尾 的字符串
"^a[0-9]+c$"
  • 匹配以a 开头, 中间不是数字, c结尾的字符串
"^a[^0-9]*c$"
  • 匹配以ab开头,b出现0次或多次,c结尾的字符串
"^ab*c$"

3. grep

  • grep和sed中,\t和\s都是无效的,要表示制表符和空格,只能直接敲入tab和空格键,这个在shell脚本中还好说,在命令行模式下就比较麻烦了,因为tab默认是会智能补全命令的,所以要在按tab之前按下ctrl+v,就可以把tab打出来了
  • egrep和grep -E是等效的,egrep相比grep对正则表达式有了一些扩展支持,具体包括一下几点grep不支持(特性grep是可以用的,只不过要在元字符前面加上转义符,比如用到+时,应敲入\+
    • +:匹配一个或多个先前的字符
    • ?:匹配零个或多个先前的字符
    • a|b|c :匹配a或b或c
    • ():分组符号

[1] (小tip)grep中坑爹的正则表达式
[2] shell学习(八) 【shell 正则 匹配符和限定符】

posted @ 2022-08-24 15:50  言思宁  阅读(328)  评论(0编辑  收藏  举报