正则表达式

正则表达式的应用十分广泛

1. Linux文本处理和正则表达式

1.1 grep

1
grep [options] pattern [file...]
  • 最简单的用法就是grep text file,就是在file中过滤出有text内容的行
  • -v:不包括字符串的行
  • -i:忽略大小写
  • -n:匹配的行号
  • -c:匹配的行数
  • -o:只显示字符串,不显示其他内容
  • -q:静默模式,不做任何显示,但是这个命令是有返回值的,可以判断是否含有字符串
  • -An:显示A的后n行
  • -Bn:显示B的前n行
  • -Cn:显示C的前n行与后n行
  • -e:搜索多个关键字,或的关系
  • -w:匹配整个单词

grep强大之处在于其支持正则表达式,下面介绍一下正则表达式

1.2 正则表达式

用特定的表达式代替文本的一部分,有点类似通配符,但是和通配符有很大区别,用正则表达式最好加上双引号

很多地方都可以使用正则表达式,所以很有必要掌握

  • 使用man 7 regex可以查看正则表达式的用法
  • 正则表达式中用来实现功能表达式的叫做元字符:字符匹配、匹配次数、位置锚定、分组
  • 字符匹配
    • .:匹配单一字符,要表达.本身,使用转义\,中括号里的.就表示其本身,无需转义
    • []:匹配中括号内的任意一个字符,^取反,表示匹配中括号内不存在的字符
    • [:alnum:]:字母或数字
    • [:alpha:]:匹配任意大小写字母
    • [:lower:]:匹配小写字母
    • [:upper:]:匹配大写字母
    • [:blank:]:匹配空白字符
    • [:space:]:水平和垂直的空白字符,比[:blank:]的范围广
    • [:cntrl:]:匹配不可打印的控制字符
    • [:digit:]:匹配十进制数
    • [:xdigit:]:匹配十六进制数
    • [:graph:]:匹配为可打印的非空白字符
    • [:print:]:匹配可打印字符
    • [:punct:]:匹配标点符号
  • 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
    • *:表示前面的字符任意次,包括0次
    • .*:表示匹配任意长度的字符,表示任意字符的任意次
    • \?:表示匹配前面的字符0或1次
    • \+:表示匹配前面的字符至少1次
    • \{n\}:表示匹配前面的字符n次
    • \{m,n\}:表示匹配前面的字符串至少m次,至多n次,m,n可为缺省值
  • 位置锚定
    • ^:行首锚定,用于模式的最左侧
    • $:行尾锚定,用于模式的最右侧
    • ^PATTERN$:用于模式匹配整行
      • ^$:空行
      • ^[[:space:]]*$:空白行
    • \< or \b:词首锚定
    • \> or \b:词尾锚定
    • \<PATTERN\>:匹配整个单词
  • 分组
    • \(\):将一个或多个字符捆绑在一起,当做一个整体进行处理,如 \(root\)\+
    • 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为\1 \2 \3
    • \1:表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
      • 举例:\(ab\+\(cd\)\+\)
        • \1ab\+\(cd\)\+
        • \2cd
    • 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
      • 举例:当出现\(r..t\)时,第一次匹配到了root,使用\1匹配到的就是root了,而不是r..t
    • \|:或者

1.3 扩展的正则表达式

  • egrep = grep -E
  • egrep [options] pattern [file...]
  • 扩展的正则表达式和基本的正则表达式的区别基本上就是少\,写起来更加方便,具体使用看具体情况
  • © 2019-2022 Wendell
  • Powered by Hexo Theme Ayer

请我喝杯咖啡吧~

支付宝
微信