跳转至

Shell 与文本处理学习路线

Shell 既是命令解释器,也是把小工具组合成处理流程的语言。运维中最常见的工作不是写几百行脚本,而是把服务状态、日志和配置转换成可以判断的问题证据。

输入:文件 / 标准输入 / 命令输出
  → 选择:grep
  → 编辑:sed
  → 分列与统计:awk
  → 排序与聚合:sort / uniq
  → 输出:终端 / 文件 / 下一个命令

学习顺序

顺序 章节 要解决的问题
1 Shell 基础、管道与引用 stdin/stdout/stderr、退出码、引号和安全组合
2 grep 与正则筛选 从文件和命令输出中找到需要的行
3 sed 流编辑 替换、删除、选取和安全修改配置
4 awk 字段处理 按列筛选、计算、分组和格式化
5 sort 与 uniq 排序、去重、计数和 Top N
6 变量、环境与 export Shell 变量怎样传给子进程,PATH 怎样生效
7 运维组合案例 日志、连接数、进程、磁盘和配置的完整分析

先建立三个习惯

  1. 修改文件前先把结果打印到终端,确认后再覆盖或使用 sed -i
  2. 所有可能包含空格、通配符或换行的变量都写成 "$variable"
  3. 复杂流水线分段验证,不要一次写完后只看最终空结果。

Linux 与 macOS 差异

Linux 服务器通常使用 GNU grep/sed/awk/coreutils;macOS 默认多为 BSD 实现。常见差异包括:

  • GNU sed 原地修改可用 sed -i '...' file,BSD/macOS 通常需要 sed -i '' '...' file
  • grep -Psort -hsed --debug 等并非所有平台都有。
  • 默认 awk 可能不是 GNU awk,避免无意依赖 gawk 扩展。
  • 脚本先确定目标平台;需要可移植时优先 POSIX 写法。
grep --version 2>/dev/null || grep -V
sed --version 2>/dev/null || sed -h
awk --version 2>/dev/null || awk -W version
sort --version 2>/dev/null || sort --help

命令帮助

man grep
man sed
man awk
man sort
command --help
type grep
command -v awk

先确认命令是外部程序、Shell builtin、alias 还是函数。线上看到陌生参数时查目标主机的 man,不要假设本机与服务器版本相同。