Linux Shell 脚本高级编程
掌握 awk、sed 和正则表达式,可以高效地处理文本数据和自动化日常任务。
一、正则基础
| 符号 | 含义 | 示例 |
|---|---|---|
| . | 任意字符 | a.c 匹配 abc |
| * | 零次或多次 | ab*c 匹配 ac |
| + | 一次或多次 | ab+c 匹配 abc |
| ? | 零次或一次 | ab?c 匹配 ac |
| ^ | 行首 | ^abc |
| $ | 行尾 | abc$ |
| [] | 字符集 | [abc] 匹配 a/b/c |
grep "pattern" file # 基本正则
grep -E "pattern" file # 扩展正则
grep -P "pattern" file # Perl 正则
二、awk 进阶
awk 是强大的文本处理语言,擅长列处理。
awk '{print $1, $3}' file # 打印列
awk '$3 > 100 {print $1, $3}' file # 条件过滤
awk -F: '{print $1, $7}' /etc/passwd # 分隔符
awk '{sum+=$1} END{print sum, sum/NR}' file # 统计求和
awk '{count[$1]++} END{for(k in count) print k, count[k]}' file
三、sed 进阶
sed 是流编辑器,擅长行级文本替换。
sed 's/old/new/g' file # 全局替换
sed '/pattern/d' file # 删除匹配行
sed '1,5d' file # 删除1-5行
sed '/pattern/a new line' file # 匹配后插入
sed -e 's/old/new/g' -e '/^$/d' file
四、实战案例
# 日志统计 HTTP 状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 提取 IP 去重
awk '{print $1}' access.log | sort -u
# 批量替换
find . -name "*.conf" -exec sed -i 's/old/new/g' {} \;
# 提取时间段日志
sed -n '/2026-05-10 10:/,/2026-05-10 11:/p' syslog
五、总结
awk、sed 和正则表达式是 Shell 脚本三大核心技能。多加练习,几行命令就能解决复杂文本处理。
本文基于实际生产环境经验编写,配置参数需根据具体情况调整。建议在测试环境验证后再应用于生产环境。如需了解更多技术细节和实践案例,请关注本站后续文章。
虾米生活分享

评论前必须登录!
注册