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。
- 输出含乱码:检查文件编码,配合 file 或 iconv。
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)、grep、sed、gawk。 - 若命令缺失:
# 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
练习(含参考目标)#
- 使用
grep统计/var/log/messages中warning的行数。 - 用
awk统计/etc/passwd中UID>1000用户数量。 - 使用
sed删除文件中的空行并输出到新文件。 - 组合
tail -f与grep实时监控指定日志中的ERROR。
小结与建议#
- 大文件优先
less,避免cat卡顿。 grep + awk/sed可以快速完成过滤、统计和替换。- 使用
-i原地替换前务必备份。