wiki/运维/Linux/笔记/18.正则表达式.md
2026-04-08 19:40:00 +08:00

2.7 KiB
Raw Permalink Blame History

1、正则表达式概览

正则表达式Regular Expression用于描述一类字符串匹配规则在 Linux 中常与 grepsedawk 等命令搭配使用。

常见场景:

  • 匹配日志中的特定格式
  • 过滤 IP、端口、用户名等文本
  • 批量替换字符串
  • 校验输入格式

2、基本字符匹配

2.1 .

  • .:匹配任意单个字符

示例:

a.c

可以匹配:abca1ca-c

2.2 []

  • []:匹配指定范围中的任意单个字符

示例:

[0-9]
[a-z]
[A-Z]

2.3 [^]

  • [^...]:匹配不在指定范围内的任意单个字符

示例:

[^0-9]

表示匹配任意一个非数字字符。

3、匹配次数

3.1 *

  • *:匹配前一个字符 0 次或多次

示例:

ab*c

可以匹配:acabcabbc

3.2 .*

  • .*:匹配任意长度的任意字符

这个组合在日志处理里非常常见。

3.3 ?

在基本正则中通常写作 \?,表示:

  • 前一个字符 0 次或 1 次

3.4 +

在基本正则中通常写作 \+,表示:

  • 前一个字符 至少 1 次

3.5 {}

在基本正则中通常写作转义形式:

  • \{n\}:前一个字符恰好出现 n
  • \{m,n\}:前一个字符出现 mn
  • \{,n\}:前一个字符最多出现 n
  • \{n,\}:前一个字符至少出现 n

4、位置锚定

  • ^:行首
  • $:行尾
  • ^$:空行

示例:

^root

表示匹配以 root 开头的行。

bash$

表示匹配以 bash 结尾的行。

5、分组与或关系

5.1 \|

在基本正则中,\| 表示“或者”。

示例:

root\|admin

表示匹配 rootadmin

5.2 ()

在扩展正则中,分组通常使用 ();在部分基本正则工具中可能需要转义。

6、基本正则与扩展正则

6.1 基本正则 BRE

常见于:

  • 默认 grep
  • 默认 sed

其中 ?+{}| 往往要写成转义形式。

6.2 扩展正则 ERE

常见于:

  • grep -E
  • egrep
  • sed -r

扩展正则写法更自然,例如:

grep -E 'root|admin' file.txt

7、常见示例

7.1 匹配空行

grep '^$' file.txt

7.2 匹配注释行

grep '^#' file.txt

7.3 匹配数字

grep '[0-9]' file.txt

7.4 匹配以 .log 结尾的文件名

grep '\.log$' file.txt

8、小结

  • 正则表达式用于描述字符串匹配规则
  • .[]*^$ 是最基础也是最高频的元字符
  • BRE 和 ERE 的主要区别在于部分符号是否需要转义
  • 学会正则后,grepsedawk 的能力会明显提升