5.1 文本处理与正则表达式进阶
一、文本处理概述
Linux 运维中的大量数据都以文本形式存在,例如:
Shell 文本处理通常依赖三类核心工具:
| 工具 |
作用 |
| grep |
文本过滤 |
| sed |
文本编辑与替换 |
| awk |
字段分析与格式化 |
三者通常通过管道组合使用,实现日志分析、配置修改和自动化处理。
二、grep 文本过滤
grep 用于搜索匹配内容,是 Linux 中最常见的文本过滤工具。
基本用法
id
常用参数
显示行号
id1
| grep -n "linux" test.txt
|
忽略大小写
id1
| grep -i "linux" test.txt
|
反向匹配
id1
| grep -v "linux" test.txt
|
统计匹配数量
id1
| grep -c "linux" test.txt
|
三、管道与组合处理
管道 | 用于将前一个命令输出交给后一个命令处理。
示例
id
排除 grep 自身进程
id1
| ps aux | grep nginx | grep -v grep
|
这种组合方式在进程检测、日志分析中非常常见。
四、正则表达式基础
正则表达式用于按规则匹配文本。
常见应用:
基础元字符
任意字符
id
. 表示任意单个字符。
行首匹配
id
行尾匹配
id
五、扩展正则表达式
扩展正则需使用:
id
或:
id
或匹配
id1
| grep -E "linux|mysql" test.txt
|
一个或多个字符
id
零个或一个字符
id
六、sed 文本编辑
sed 主要用于文本替换、删除和批量修改。
基本替换
id1
| echo "linux" | sed 's/linux/shell/'
|
全局替换
id1
| echo "aaa aaa" | sed 's/aaa/bbb/g'
|
参数 g 表示全局替换。
文件原地修改
Linux:
id1
| sed -i 's/root/admin/g' user.txt
|
macOS:
id1
| sed -i '' 's/root/admin/g' user.txt
|
macOS 与 Linux 的 sed -i 参数存在差异,需要特别注意。
七、awk 字段分析
awk 擅长按列处理文本,广泛用于日志分析与统计。
基础输出
id1
| awk '{print $1}' score.txt
|
输出指定字段
id1
| awk '{print $1, $2}' score.txt
|
字段说明
| 符号 |
含义 |
$1 |
第一列 |
$2 |
第二列 |
$0 |
整行 |
条件过滤
id1
| awk '$2 >= 90 {print $1}' score.txt
|
表示第二列大于等于 90 时输出第一列。
八、实际运维场景
查看监听端口
id1
| netstat -an | grep LISTEN
|
查看 IP 地址
id
推荐新系统使用:
id
提取进程 PID
id1
| ps aux | grep nginx | grep -v grep | awk '{print $2}'
|
九、日志分析组合
Linux 运维强调“小工具组合”思想。
示例
id1
| cat log.txt | grep ERROR | awk '{print $1}'
|
处理流程:
id
十、总结
文本处理是 Linux 运维与 Shell 自动化的核心能力。grep、sed、awk 配合正则表达式和管道机制,可以高效完成日志分析、配置修改、状态提取与批量数据处理。
核心内容包括:
- grep 文本过滤
- sed 文本替换
- awk 字段分析
- 正则表达式
- 管道组合
- 日志处理
- 运维自动化文本分析