Linux 正则表达式权威指南

(BRE/ERE/PCRE 全解析,覆盖 grep/sed/awk 场景)

一、正则表达式分类

二、核心元字符速查表
1. 基础元字符(BRE/ERE通用)

2. 量词(ERE/PCRE支持)

3. 高级符号(ERE/PCRE专用)

三、POSIX 字符类(通用)

使用示例:

grep '[[:digit:]]\{3\}' file.txt  # 匹配连续3个数字(BRE模式)

四、工具专用语法
1. grep 家族

示例:

grep -P '^\d{3}-\d{4}$' phone.txt  # 匹配 "123-4567" 格式的电话号码

2. sed 流编辑器

3. awk 文本处理器

awk '/^Error/ {print $2}' log.txt          # 匹配以 "Error" 开头的行并打印第二列
awk '$3 ~ /[0-9]{2,}/ {print $0}' data.txt # 第三列包含至少2位数字的行

五、常见场景实战
1. 日志分析(grep)

# 查找包含 "error" 或 "warning" 的行(不区分大小写)
grep -Ei 'error|warning' /var/log/syslog

# 提取 IPv4 地址
grep -Po '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b' access.log

2. 文本替换(sed)

# 将日期格式从 "YYYY-MM-DD" 改为 "DD/MM/YYYY"
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' dates.txt

# 删除 HTML 标签
sed 's/<[^>]*>//g' webpage.html

3. 数据提取(awk)

# 提取 CSV 文件的第3列(逗号分隔)
awk -F',' '$3 ~ /^[A-Z]{2}$/ {print $3}' countries.csv  # 匹配两位大写字母的国家代码

六、注意事项与陷阱

贪婪匹配:

echo "aabbaabbaa" | grep -o 'a.*a'  # 输出整个字符串(贪婪匹配)
echo "aabbaabbaa" | grep -o 'a.*?a' # PCRE非贪婪模式(需 `grep -P`)

转义差异:

BRE 中 +?{} 需转义:\+, \?, \{n\}

ERE/PCRE 中直接使用:+, ?, {n}

性能优化:

避免 .* 开头的表达式,优先用具体字符约束

使用 ^/$ 锚定可加速匹配

附:正则表达式调试工具推荐

RegExr(在线可视化测试)

grep --color=auto(高亮匹配结果)

perl -ne 'print if /pattern/'(Perl 强兼容性测试)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值