2.7 KiB
2.7 KiB
1、正则表达式概览
正则表达式(Regular Expression)用于描述一类字符串匹配规则,在 Linux 中常与 grep、sed、awk 等命令搭配使用。
常见场景:
- 匹配日志中的特定格式
- 过滤 IP、端口、用户名等文本
- 批量替换字符串
- 校验输入格式
2、基本字符匹配
2.1 .
.:匹配任意单个字符
示例:
a.c
可以匹配:abc、a1c、a-c
2.2 []
[]:匹配指定范围中的任意单个字符
示例:
[0-9]
[a-z]
[A-Z]
2.3 [^]
[^...]:匹配不在指定范围内的任意单个字符
示例:
[^0-9]
表示匹配任意一个非数字字符。
3、匹配次数
3.1 *
*:匹配前一个字符 0 次或多次
示例:
ab*c
可以匹配:ac、abc、abbc
3.2 .*
.*:匹配任意长度的任意字符
这个组合在日志处理里非常常见。
3.3 ?
在基本正则中通常写作 \?,表示:
- 前一个字符 0 次或 1 次
3.4 +
在基本正则中通常写作 \+,表示:
- 前一个字符 至少 1 次
3.5 {}
在基本正则中通常写作转义形式:
\{n\}:前一个字符恰好出现n次\{m,n\}:前一个字符出现m到n次\{,n\}:前一个字符最多出现n次\{n,\}:前一个字符至少出现n次
4、位置锚定
^:行首$:行尾^$:空行
示例:
^root
表示匹配以 root 开头的行。
bash$
表示匹配以 bash 结尾的行。
5、分组与或关系
5.1 \|
在基本正则中,\| 表示“或者”。
示例:
root\|admin
表示匹配 root 或 admin。
5.2 ()
在扩展正则中,分组通常使用 ();在部分基本正则工具中可能需要转义。
6、基本正则与扩展正则
6.1 基本正则 BRE
常见于:
- 默认
grep - 默认
sed
其中 ?、+、{}、| 往往要写成转义形式。
6.2 扩展正则 ERE
常见于:
grep -Eegrepsed -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 的主要区别在于部分符号是否需要转义
- 学会正则后,
grep、sed、awk的能力会明显提升