1.8.2 文本查看与处理命令(cat、less、head、tail、grep、awk、sed)

本节聚焦常用文本查看与处理命令,覆盖日志排查、配置检查与批量文本加工的典型场景。核心命令包括 cat、less、head、tail、grep、awk、sed。

原理草图:文本处理流水线

文章图片

1. cat:快速查看与拼接#

命令解释
- cat file:输出文件全部内容。
- cat -n file:显示行号(包含空行)。
- cat -b file:显示行号(跳过空行)。
- cat a b > all.txt:拼接文件。

示例:合并与查看配置

# 1) 查看小文件
cat /etc/hosts

# 2) 带行号查看
cat -n /etc/hosts

# 3) 合并两个配置片段并输出到新文件
cat /etc/hosts /etc/hostname > /tmp/hostinfo.txt

排错提示
- 大文件卡顿:使用 less 代替 cat
- 输出含乱码:检查文件编码,配合 fileiconv


2. less:大文件分页查看#

命令解释
- less file:分页查看。
- /keyword:搜索关键字。
- n/N:跳转下/上一处匹配。
- G/g:末尾/开头。

示例:查看日志

# 进入分页查看,搜索 ERROR
less /var/log/messages
# 在 less 内部按 /ERROR 回车,按 n/N 跳转

排错提示
- 按键无响应:确认当前焦点在 less 窗口;按 q 退出。


3. head / tail:查看文件头尾#

命令解释
- head -n 20 file:前 20 行。
- tail -n 50 file:后 50 行。
- tail -f file:实时跟踪追加内容。

示例:实时跟踪并过滤

# 实时跟踪日志并筛选 ERROR
tail -f /var/log/messages | grep ERROR

排错提示
- tail -f 无输出:确认文件有新增内容,或权限不足。


4. grep:按模式搜索#

命令解释
- grep 'error' file:匹配行。
- -i:忽略大小写。
- -c:统计匹配行数。
- -R:递归搜索目录。
- -v:反向匹配。
- -E:扩展正则。

示例:搜索 Nginx 监听端口

# 递归查找 listen 配置
grep -R "listen" /etc/nginx/ | sed 's/;//g'

排错提示
- 匹配不到:检查大小写,必要时加 -i
- 目录无权限:加 sudo 或调整权限。


5. awk:按列处理与格式化#

命令解释
- 默认以空格/制表符分列。
- $1$2…:列字段。
- -F:指定分隔符。
- NR:行号。

示例:统计登录 Shell

# 查看 /etc/passwd 中用户名与 shell
awk -F: '{print $1, $7}' /etc/passwd

# 过滤 UID > 1000 的用户
awk -F: '$3>1000 {print $1, $3}' /etc/passwd

排错提示
- 列错位:确认分隔符,使用 -F
- 空行干扰:结合 NF>0 过滤空行。


6. sed:流式编辑与替换#

命令解释
- s/old/new/:替换每行首个匹配。
- s/old/new/g:全局替换。
- -i:原地替换(谨慎使用)。
- d:删除行。

示例:批量替换并备份

# 1) 替换前先备份
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# 2) 将 worker_processes 1 改为 2(原地替换)
sed -i 's/worker_processes 1/worker_processes 2/' /etc/nginx/nginx.conf

# 3) 删除空行并输出到新文件
sed '/^$/d' /etc/nginx/nginx.conf > /tmp/nginx.conf.clean

排错提示
- 原地替换后配置损坏:立即用 .bak 回滚。
- 正则未匹配:检查特殊字符是否需要转义。


7. 组合示例(含预期效果)#

示例 1:统计错误日志中服务出现次数

# 假设日志格式:时间 级别 服务名 信息
# 2024-01-01 ERROR api_service timeout

grep ERROR /var/log/app.log | awk '{print $3}' | sort | uniq -c | sort -nr

预期效果:输出服务名及错误次数,按次数降序。

示例 2:查看最近 200 行错误并编号

tail -n 200 /var/log/app.log | grep -i error | nl -ba

预期效果:列出最近 200 行中包含 error 的行并显示行号。


安装与依赖说明#

  • 大多数发行版默认包含:coreutils(cat/head/tail)、grepsedgawk
  • 若命令缺失:
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y coreutils grep sed gawk

# RHEL/CentOS/Rocky
sudo yum install -y coreutils grep sed gawk

练习(含参考目标)#

  1. 使用 grep 统计 /var/log/messageswarning 的行数。
  2. awk 统计 /etc/passwdUID>1000 用户数量。
  3. 使用 sed 删除文件中的空行并输出到新文件。
  4. 组合 tail -fgrep 实时监控指定日志中的 ERROR

小结与建议#

  • 大文件优先 less,避免 cat 卡顿。
  • grep + awk/sed 可以快速完成过滤、统计和替换。
  • 使用 -i 原地替换前务必备份。