进阶实战:文本处理三剑客

如果你需要对 100 个文件执行同样的替换操作,或者从几万行日志里提取特定 IP,你不需要打开编辑器,你需要的是“三剑客”。


1. Grep (搜索过滤器) —— “找得到”

用于提取包含关键词的行。

  • 常见用法:
    • grep "error" /var/log/syslog: 查找包含 error 的行。
    • grep -i "Error" .: 忽略大小写。
    • grep -r "API" .: 递归搜索当前目录下所有文件。
    • ps aux | grep nginx: 在进程列表中寻找特定的服务。

2. Sed (流编辑器) —— “修改大师”

用于对文本进行非交互式的搜索并替换。

  • 常见用法:
    • sed -i 's/http/https/g' config.txt: 将文件中所有的 http 替换为 https。
    • sed '5,10d' file: 仅在输出中删除文件的第 5 到 10 行。

3. Awk (文本处理器) —— “报表大师”

擅长按“列”处理复杂文本,其本质是一门微型编程语言。

  • 常见用法:
    • ps aux | awk '{print $1, $11}': 提取 ps 命令输出的第 1 列(用户)和第 11 列(进程名)。
    • awk -F: '{print $1}' /etc/passwd: 使用 : 作为分隔符,提取第一列(用户名)。

4. 组合实战:快速分析日志

实操:提取访问量最高的 10 个 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
  1. awk 提取第一列 IP。
  2. sort 排序,为去重做准备。
  3. uniq -c 计数并去重。
  4. sort -nr 按数字倒序排。
  5. head 显示前 10 名。

5. 结业练习

Navigation