Linux正则表达式


正则表达式(Regular Expression)

Linux正则表达式

通常Linux的运维工作都需要面对大量的文本内容(含字符串内容),例如:

  • 配置文件
  • 程序代码
  • 命令输出
  • 日志文件

面对这些文本内容我们经常会有特定的需求,即从文本中查找出特定的字符串。例如分析程序崩溃时候,要查找带有error字样的输出,分析日志时,要查找所有的时间戳。

凡此种种都需要我们从文本中提取出特定的字符串。而在我们提取出了字符串之后,Linux中提供了grepawksedxarg等工具来操纵文本,帮助我们完成工作。

因此,在后面讲解grepawksedLinux三剑客前,需要讲解正则表达式。因为Linux三剑客都是使用正则表达式在文件(数据流)中过滤内容的。

正则表达式介绍

正则表达式(Regular Expression),简称为REGEXP,是指由一类特殊字符及文本字符所编写的模式。其中有些字符不表示其字面意义,而是用于控制或者通配功能。

正则表达式分两类:

  • 基本正则表达式Basic Regular ExpressionBRE
  • 扩展正则表达式Extend Regular ExpressionERE

此外,正则表达式将字符分为普通字符(如abcd1230#等字符),以及用于控制、通配等等具有特殊含义的元字符(如^$.[]*等)。基本上,除了元字符以外的字符都是普通字符。

基本正则表达式的元字符有:^$.[]*

扩展正则表达式的元字符有:^$.[]* + (){}?+|

正则表达式的意义

通过使用正则表达式,Linux管理员可以:

  • 处理大量的字符串
  • 处理文本

通过正则表达式的辅助,Linux管理员能够快速过滤、替换、处理所需要的字符串、文本,让工作更加高效

过滤、替换、处理的基础是查找,因此就出现了正则表达式:

  • 正则表达式是一套规则和方法
  • 正则表达式工作时以行为单位,一次处理一行
  • Linux三剑客(sedawkgrep)全部支持正则表达式

Linux三剑客

Linux三剑客指的是sedawkgrep这三个程序。这三个程序全部都是文本处理工具,其中:

  • grep:文本过滤工具,查找工具
  • sed:流编辑器(Stream Editor),文本编辑器
  • awk:文本报告生成器,格式化文本,例如将结果以excel表格的形式输出

基本正则表达式

基本正则表达式的元字符,主要有下面三种作用:

  • 匹配字符
  • 匹配次数
  • 位置锚定

元字符具体的介绍如下:

符号 作用
^ 用于模式的最左侧,例如^oldboy将匹配以oldboy单词开头的行
$$` 用于模式的最右侧,例如oldboy$$将匹配以oldboy`单词结尾的行
^$ 组合符,表示匹配空行。
. 表示匹配一个字符,不匹配空行(\n字符),例如a.将会匹配包括a0a#ac等等在内的内容
\ 转义字符,\.表示小数点,而非.元字符
* 匹配前一个字符,0次或1次以上,例如ht*将会匹配hhthtt等内容
.* 匹配任意长度的任意字符
[] 匹配[]内任意一个字符,例如h[at]将会匹配haht
[^] 表示[]的取反,即不匹配,例如h[^at]将匹配除了haht以外的所有字符
<> 表示匹配<>内完整的内容,例如<http>将会匹配出单词http而不会匹配出单词http
</> 表示单词的左侧、右侧,例如<http将会匹配出单词httphttps

扩展正则表达式

字符 作用
+ 匹配前面的字符一次或多次,例如ht+将会匹配hthtt等内容,但是不会匹配h,注意和*区分
[]+ 匹配[]内的字符一次或多次,例如[:1]+将会匹配::::111:
? 匹配前面的字符0次或一次,例如ht?将会匹配hht而不会匹配htt
` ` 表示或的含义,例如` 将会匹配echocat`
() 表示将()内的东西视为一个整体
a{m,n} 表示匹配前一个字符a最少m次,最多n
a{m,} 表示匹配前一个字符至少m
a{n} 表示匹配前一个字符恰好n
a{,m} 表示匹配前一个字符至多m

文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录