一、正则表达式核心概念
正则表达式定义
正则表达式(Regular Expression)是一种用于描述文本模式的字符串,由普通字符(如字母、数字)和元字符(具有特殊含义的符号)组成。其核心用途包括:
验证:检查输入是否符合特定格式(如邮箱、电话)
搜索:在大文本中定位特定模式
替换:批量修改匹配的文本内容
数据提取:从非结构化文本中抽取结构化信息
二、grep、egrep、sed的功能与参数对比
grep(文本搜索工具)
功能:基于正则表达式匹配文本行,默认支持基础正则(BRE)
核心参数:
-i:忽略大小写
-v:反向匹配(显示不匹配的行)
-n:显示行号
-r:递归搜索目录
-E:启用扩展正则(等同于egrep)
示例:搜索包含IP地址的行
bash
复制
grep -E '([0-9]{1,3}.){3}[0-9]{1,3}' file.txt
egrep(扩展版grep)
功能:支持扩展正则(ERE),语法更灵活(无需转义+、?、|等)
特有参数:
-o:仅显示匹配的字符串
-P:启用Perl兼容正则(如\d)
示例:匹配邮箱地址
bash
复制
egrep '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z]{2,}' file.txt
sed(流编辑器)
功能:基于正则的文本编辑(替换、删除、插入)
核心参数:
-i:直接修改文件(备份文件加.bak)
-n:抑制默认输出(常与p命令配合)
-r:启用扩展正则
常用命令:
s/old/new/g:全局替换(如删除空行sed '/^$/d' file)
p:打印匹配行(如显示第5行sed -n '5p' file)
正则表达式在命令中的应用技巧:
grep/egrep:
基础匹配:grep '^start' file 匹配以"start"开头的行
分组捕获:egrep '(http|https)😕/' file 匹配URL协议
sed:
范围替换:sed '1,5s/foo/bar/g' file 替换前5行的"foo"
条件删除:sed '/^#/d' file 删除所有注释行
四、总结与最佳实践
正则选择优先级:
简单匹配用grep,复杂逻辑用egrep
文本编辑需求(如替换)首选sed
性能优化:
大文件处理时,避免使用.*等贪婪匹配
结合-i参数前先测试无破坏性操作
跨平台兼容:
macOS的sed语法与GNU sed差异较大,建议使用gsed