1. grep – 文本搜索
-
用途:在文件或输入流中搜索包含指定模式(正则表达式)的行。
-
语法:
grep [选项] "搜索模式" 文件名 -
常用选项:
-i:忽略大小写(如搜索 “Error” 和 “error”)。-v:反向匹配(显示不包含模式的行)。-r:递归搜索目录下的所有文件。-n:显示匹配行的行号。-A 3:显示匹配行及其后3行(After context)。-B 2:显示匹配行及其前2行(Before context)。
-
示例:
# 在日志中搜索 "error",并显示行号 grep -n "error" /var/log/syslog # 递归搜索目录中所有Java文件中的 "TODO" 注释 grep -r "TODO" /home/project/src/*.java # 排除注释行(以#开头) grep -v "^#" /etc/nginx/nginx.conf
2. awk – 文本分析与字段提取
-
用途:按行处理文本,支持按列提取、计算和格式化输出。
-
语法:
awk '条件 {动作}' 文件名 -
核心概念:
$0:整行内容。$1, $2...:第1列、第2列(默认以空格或制表符分隔)。NF:当前行的列数。NR:当前行号。
-
常用场景:
- 提取字段:
awk '{print $1}'(输出第一列)。 - 条件过滤:
awk '$3 > 500 {print $0}'(第三列大于500的行)。 - 计算统计:求和、平均值等。
- 提取字段:
-
示例:
# 提取访问日志中的IP地址(假设第一列为IP) awk '{print $1}' /var/log/nginx/access.log # 统计HTTP状态码为404的请求数量 awk '$9 == 404 {count++} END {print count}' /var/log/nginx/access.log # 计算文件总大小(假设第二列为大小) ls -l | awk '{sum += $5} END {print "总大小:" sum "字节"}'
3. sed – 流编辑器(文本替换/编辑)
-
用途:对文本进行流式编辑(如替换、删除、插入行)。
-
语法:
sed [选项] '编辑命令' 文件名 -
常用操作:
- 替换文本:
s/旧内容/新内容/g(g表示全局替换)。 - 删除行:
sed '/pattern/d'。 - 插入行:
sed '2i 插入内容'(在第2行前插入)。
- 替换文本:
-
示例:
# 将文件中的 "old" 替换为 "new",并保存到新文件 sed 's/old/new/g' input.txt > output.txt # 删除包含 "debug" 的行(直接修改原文件需加 -i) sed -i '/debug/d' app.log # 在配置文件第5行后插入一行配置 sed -i '5a server_name example.com;' /etc/nginx/nginx.conf
4. cat – 显示文件内容
-
用途:查看文件内容、合并多个文件。
-
语法:
cat [选项] 文件名 -
常用场景:
- 查看文件:
cat file.txt。 - 合并文件:
cat file1.txt file2.txt > merged.txt。 - 创建临时文件:
cat > temp.txt(输入内容后按Ctrl+D保存)。
- 查看文件:
-
示例:
# 查看多个文件内容 cat /etc/os-release /proc/version # 将多个日志文件合并 cat *.log > all_logs.txt
5. tail – 查看文件尾部
-
用途:实时监控日志更新或查看文件末尾内容。
-
语法:
tail [选项] 文件名 -
常用选项:
-n 20:显示最后20行(默认10行)。-f:持续跟踪文件变化(实时监控日志)。-F:类似-f,但会重试(适合跟踪可能被轮转的日志)。
-
示例:
# 实时监控Nginx访问日志 tail -f /var/log/nginx/access.log # 查看日志最后100行中的错误 tail -n 100 app.log | grep "ERROR"
6. head – 查看文件头部
-
用途:快速预览文件开头内容。
-
语法:
head [选项] 文件名 -
常用选项:
-n 5:显示前5行(默认10行)。
-
示例:
# 查看CSV文件的表头 head -n 1 data.csv # 检查脚本的前几行 head -n 5 backup.sh
7. less – 分页查看文件
-
用途:交互式浏览大文件(支持搜索、翻页)。
-
语法:
less 文件名 -
操作快捷键:
空格:向下翻页。b:向上翻页。/keyword:搜索关键字(按n跳转到下一个匹配项)。q:退出。
-
示例:
# 查看大型日志文件并搜索 "Timeout" less /var/log/syslog # 输入 `/Timeout` 并按回车
8. wc – 统计行数/单词数/字符数
-
用途:统计文件内容的基本信息。
-
语法:
wc [选项] 文件名 -
常用选项:
-l:仅统计行数。-w:统计单词数。-c:统计字节数。
-
示例:
# 统计日志文件的行数(常用于分析数据量) wc -l /var/log/nginx/access.log # 统计代码文件中的单词数 wc -w app.py
实战案例:分析Nginx访问日志
目标:统计访问量最高的前5个IP地址
awk '{print $1}' /var/log/nginx/access.log | \
sort | \
uniq -c | \
sort -nr | \
head -n 5
步骤解析:
awk '{print $1}':提取日志中的第一列(IP地址)。sort:对IP地址排序,便于uniq统计。uniq -c:统计每个IP的出现次数。sort -nr:按次数降序排序。head -n 5:显示前5个结果。
示例输出:
1420 203.0.113.45
1203 198.51.100.22
891 192.0.2.17
765 203.0.113.89
632 198.51.100.5
小贴士:
- 管道符
|:将前一个命令的输出作为下一个命令的输入。 - 正则表达式:结合
grep或sed时,可灵活匹配复杂模式(如日期、邮箱)。 - 性能优化:处理超大文件时,避免多次读取文件(尽量通过管道组合命令)。
- 备份文件:使用
sed -i直接修改文件前,建议先备份原文件。
3471

被折叠的 条评论
为什么被折叠?



