目录
在Linux中,正规表示法(Regular Expression,简称正则表达式)是一种用于匹配、搜索和操作文本字符串的强大工具。它通过特定的符号和规则组合成模式(Pattern),实现对文本的高效处理。
1. 基本概念
- 作用:用于在文件中快速查找、替换或删除符合特定规则的字符串(如邮箱、IP地址等)。
- 与通配符的区别:
- 通配符(如
*
、?
)用于匹配文件名(如ls *.txt
),而正则表达式处理的是文件内的文本内容(如grep 'pattern' file.txt
)。 - 例如:通配符
*
匹配任意字符,而正则表达式的*
表示前一个字符重复0次或多次。
- 通配符(如
2. 正则表达式分类
-
基础正则表达式(BRE):
- 支持基本符号:
^
(行首)、$
(行尾)、.
(任意单字符)、*
(重复前字符)、[]
(字符集合)等。 - 示例:
grep '^hello' file.txt
匹配以hello
开头的行。
- 支持基本符号:
-
扩展正则表达式(ERE):
- 在BRE基础上增加:
+
(1次或多次)、?
(0或1次)、|
(或)、()
(分组)、{}
(次数限定)等。 - 需使用
grep -E
或egrep
:grep -E 'go{2,5}d' file.txt # 匹配`good`、`gooood`等
- 在BRE基础上增加:
3. 常用符号与示例
符号 | 作用 | 示例 |
---|---|---|
^ | 匹配行首 | ^abc (以abc 开头) |
$ | 匹配行尾 | xyz$ (以xyz 结尾) |
. | 匹配任意单个字符 | h.t (匹配hat 、hot ) |
* | 前字符重复0次或多次 | a*b (匹配b 、aab ) |
[abc] | 匹配括号内任意一个字符 | [aeiou] (匹配元音) |
\ | 转义特殊字符 | \. (匹配实际小数点) |
| | 逻辑“或” | cat|dog (匹配cat 或dog ) |
4. 应用场景与工具
- 文本搜索:
grep
grep -n --color 'error' /var/log/syslog # 高亮显示错误日志行号
- 文本替换:
sed
sed 's/old/new/g' file.txt # 全局替换`old`为`new`
- 复杂文本处理:
awk
awk '/pattern/{print $1}' file.txt # 打印匹配行的第一列
4. 正则表达式与通配符
正规表达式(正则表达式)和通配符(Wildcard)虽然都用于模式匹配,但它们在功能、语法和应用场景上有显著区别:
(1)功能范围
通配符:主要用于文件名匹配(如 ls *.txt
),由 Shell 解释,语法简单,仅支持基础符号:
*
:匹配任意数量字符(包括空字符)。?
:匹配单个任意字符。[]
:匹配括号内的单个字符(如[a-z]
)。- 局限性:无法处理复杂逻辑(如重复次数、分组等)。
正则表达式:用于复杂文本处理(如日志分析、数据校验),支持更强大的模式匹配:
- 元字符:
.
(任意字符)、^
(行首)、$
(行尾)、\d
(数字)等。- 量词:
*
(零次或多次)、+
(一次或多次)、{n,m}
(重复次数)。- 逻辑操作:
|
(或)、()
(分组)、\1
(回溯引用)等
(2)符号含义的差异
- **
*
**:- 通配符:匹配任意字符序列(如
*.txt
匹配所有.txt
文件)。 - 正则表达式:匹配前一个字符的零次或多次重复(如
a*
匹配""
、a
、aa
等)。
- 通配符:匹配任意字符序列(如
- **
?
**:- 通配符:匹配单个字符(如
file?.log
匹配file1.log
)。 - 正则表达式:匹配前一个字符的零次或一次(如
colou?r
匹配color
或colour
)
- 通配符:匹配单个字符(如
(3)应用场景
-
通配符适用场景:
- 文件操作:
rm *.tmp
(删除临时文件)、cp /data/*.log ./backup/
。 - 简单路径匹配:
find /var -name "app_????.conf"
。
- 文件操作:
-
正则表达式适用场景:
- 文本提取:
grep "\d{3}-\d{4}" access.log
(匹配电话号码)。 - 数据验证:邮箱格式
^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$
。 - 编程处理:Python 的
re
模块、JavaScript 的字段校验等。
- 文本提取:
(4)性能与复杂度
- 通配符:简单高效,适合快速文件匹配,但功能有限。
- 正则表达式:功能强大但复杂度高,处理大规模文本时可能有性能开销。
(5)总结
- 通配符:文件操作的首选工具(如 Shell 命令)。
- 正则表达式:复杂文本处理的核心技术(如编程、日志分析)。
口诀:“文件操作用通配,文本处理靠正则”。
5. 基础正规表示法练习-grep
grep 已经使用 alias 设定成为『 grep --color=auto 』
6. 注意事项
- 区分大小写:默认大小写敏感,可用
grep -i
忽略。 - 语系影响:建议设置
LANGC
或LC_ALL=C
避免字符集问题。 - 贪婪匹配:
.*
会匹配尽可能长的字符串,非贪婪模式用.*?
(需工具支持)。