引言
在 Linux 系统中,对文件内容的查看与处理是日常操作的核心环节。当我们通过文件系统操作命令(如 ls、cd)定位到目标文件后,更需要深入了解文件内部的内容。从查看小文件的 命令到处理大文件的 工具,从简单的文本编辑到复杂的正则表达式过滤,这些工具构成了 Linux 文本处理的基础体系。
Linux 系统中文件内容查看与文本处理的核心工具。涵盖 cat、less、head、tail 等查看命令,nano 编辑器及重定向管道操作。重点讲解了 grep 正则表达式过滤技巧,以及 sed、awk 等进阶文本处理工具。通过日志分析、批量修改等实战案例,帮助读者掌握从基础浏览到复杂数据处理的全流程技能,提升 Shell 脚本编写与运维效率。

在 Linux 系统中,对文件内容的查看与处理是日常操作的核心环节。当我们通过文件系统操作命令(如 ls、cd)定位到目标文件后,更需要深入了解文件内部的内容。从查看小文件的 命令到处理大文件的 工具,从简单的文本编辑到复杂的正则表达式过滤,这些工具构成了 Linux 文本处理的基础体系。
catmore/less本文将系统解析文件内容查看的各类工具、文本重定向机制、编辑器基础操作及正则表达式过滤技巧,帮助读者掌握从文件内容浏览到复杂文本处理的全流程技能,为后续 Shell 脚本编写、日志分析等高级应用奠定基础。
cat(concatenate 的缩写)是 Linux 中最常用的文件内容查看命令,主要用于显示小文件内容或合并多个文件:
# 显示单个文件内容
cat 文件名
# 合并多个文件并显示
cat 文件 1 文件 2 > 合并文件
# 显示文件并带行号
cat -n 文件名
# 压缩连续空行
cat -s 文件名
# 从标准输入读取内容(等价于直接显示文件)
cat < 文件名
参数详解:
-n:number,为每行内容添加行号(包括空行)-b:number non-blank,为非空行添加行号-s:squeeze-blank,将连续多个空行压缩为一个-E:显示每行末尾的换行符($)-T:显示 Tab 字符(^I)应用场景:
cat /etc/hostscat > test.txt(输入内容后按 Ctrl+D 保存)cat app.log.1 app.log.2 > app.all.log性能提示:
cat 查看过大文件(如 GB 级日志),可能导致终端卡死more 或 less 命令tac 命令是 cat 的反向版本,按行逆序显示文件内容:
# 逆序显示文件内容
tac 文件名
# 示例:对 test.txt 进行逆序显示
tac test.txt
核心特性:
-n、-s 等参数使用场景:
more 命令用于分屏查看大文件,每次显示一屏内容:
# 分屏查看文件
more 文件名
# 带行号分屏查看
more -n 文件名
# 从第 10 行开始查看
more +10 文件名
交互操作:
q:退出查看局限性:
所以一般情况下,建议大家使用 less 而不是 more(因为 less 更好用)
less 命令是 more 的增强版,支持上下翻页、搜索等高级功能:
# 用 less 查看文件
less 文件名
# 显示行号
less -N 文件名
# 忽略大小写搜索
less -i 文件名
高级交互操作:
/字符串:向下搜索指定字符串?字符串:向上搜索指定字符串n:重复前一次搜索N:反向重复搜索q:退出性能优势:
# 查看文件前 10 行(默认)
head 文件名
# 查看前 20 行
head -n20 文件名
# 查看前 500 字节
head -c500 文件名
# 查看文件后 10 行(默认)
tail 文件名
# 查看后 20 行
tail -n20 文件名
# 实时追踪文件更新(如日志)
tail -f 文件名
# 追踪并显示最新 10 行
tail -fn10 文件名
实时日志监控:
tail -f 常用于监控应用日志,如:
tail -f /var/log/nginx/access.log
nano 是 Linux 下简单易用的文本编辑器,适合快速编辑小文件:
# 打开文件编辑(不存在则创建)
nano 文件名
# 示例:编辑配置文件
nano config.ini
基本操作快捷键:
Ctrl+O:保存文件(WriteOut)Ctrl+X:退出编辑器(eXit)Ctrl+R:读取其他文件内容Ctrl+W:搜索文本Ctrl+G:显示帮助信息配置修改:
可通过 ~/.nanorc 文件自定义 nano 配置,如设置语法高亮:
echo "include /usr/share/nano/*.nanorc" > ~/.nanorc
# 覆盖写入文件(无则创建,有则清空)
命令 > 文件名
# 示例:将 ls 结果写入文件
ls -l > file_list.txt
# 清空文件内容(不执行命令)
> 文件名
# 追加内容到文件
命令 >> 文件名
# 示例:追加日期到日志文件
echo "$(date)" >> access.log
# 重定向错误输出到文件
命令 2> 错误文件
# 同时重定向正确和错误输出
命令 > 正确文件 2> 错误文件
# 合并正确和错误输出到同一文件
命令 &> 日志文件
# 从文件读取输入
命令 < 文件名
# 示例:将文件内容作为 bc 的输入
bc < calc.txt
管道符可将前一个命令的输出作为后一个命令的输入:
# 示例 1:过滤包含 "error" 的日志行
cat app.log | grep "error"
# 示例 2:查看当前目录下最大的 5 个文件
ls -lS | head -n5
# 示例 3:统计文件行数
cat file.txt | wc -l
管道原理:
cmd1 | cmd2 | cmd3xargs 使用grep(global regular expression print)用于在文件中搜索匹配模式的行(也就是行文本过滤工具):
# 在文件中搜索字符串
grep "搜索词" 文件名
# 示例:搜索配置文件中的端口号
grep "port" /etc/httpd/conf/httpd.conf
# 不区分大小写搜索
grep -i "SEARCH" 文件名
# 显示行号
grep -n "搜索词" 文件名
.:匹配任意单个字符[]:匹配括号内的任意字符,如 [aeiou] 匹配元音字母[^]:匹配不在括号内的字符,如 [^0-9] 匹配非数字*:匹配前一个字符 0 次或多次+:匹配前一个字符 1 次或多次(扩展正则)?:匹配前一个字符 0 次或 1 次(扩展正则){n}:匹配前一个字符 n 次(扩展正则)^:匹配行首$:匹配行尾\b:匹配单词边界(扩展正则)# 使用扩展正则表达式
grep -E "模式" 文件名
# 示例 1:匹配以数字开头的行
grep -E "^[0-9]" 文件名
# 示例 2:匹配 IP 地址
grep -E "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" 日志文件
# 排除包含指定字符串的行
grep -v "排除词" 文件名
# 示例:查看非错误日志
grep -v "error" app.log
# 匹配多个模式中的任意一个
grep -e "模式 1" -e "模式 2" 文件名
# 示例:搜索 info 或 warning 日志
grep -e "info" -e "warning" app.log
# 在目录中递归搜索
grep -r "搜索词" 目录名
# 示例:在项目中搜索特定函数
grep -r "processData" src/
示例:替换文件中的字符串
sed 's/旧字符串/新字符串/g' 文件名
示例:统计日志中各 IP 的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 示例:过滤日志并统计 IP 访问量
grep "2025-05-29" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 转换文件编码
iconv -f 源编码 -t 目标编码 输入文件 -o 输出文件
# 示例:将 UTF-8 文件转为 GBK
iconv -f utf-8 -t gbk file.txt -o file_gbk.txt
统计接口访问次数:
grep "/api/user" access.log | wc -l
查看指定时间段日志:
grep "2025-05-29 10:00" app.log
备份并修改配置文件:
sed -i.bak 's/Port 80/Port 8080/g' /etc/httpd/conf/httpd.conf
从 JSON 文件提取字段(配合 jq):
jq '.users[].name' data.json
less 替代 cat 查看大文件grep -m 10 限制匹配行数zcat access.log.gz | grep "error"用 xargs -P 4 开启 4 线程处理:
find . -name "*.log" | xargs -P 4 grep "error"
处理 GB 级文件时使用分块读取:
split -l100000 bigfile.txt part_
for f in part_*; do grep "pattern" "$f"; done
# 1. 查看今天的访问日志
tail -f /var/log/nginx/access.log
# 2. 统计 Top 10 访问 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n10
# 3. 分析慢请求(>500ms)
grep "ms\" > 500" /var/log/nginx/access.log | awk '{print $7, $11}' | sort -k2 -nr
# 1. 备份所有.py 文件
find . -name "*.py" -exec cp {} {}.bak \;
# 2. 将文件中的旧函数名替换为新函数名
find . -name "*.py" -exec sed -i 's/old_function/new_function/g' {} \;
# 3. 检查修改结果
grep -r "old_function" .
# 1. 切割当前日志
mv /var/log/app.log /var/log/app.log.`date +%Y%m%d`
# 2. 生成新日志文件
touch /var/log/app.log
# 3. 压缩一周前的日志
find /var/log/ -name "app.log.*" -mtime +7 -exec gzip {} \;
通过掌握文件内容查看与文本处理的核心工具,读者能够从简单的文件浏览进阶到复杂的日志分析、数据提取等场景。无论是 cat 与 less 的灵活选用,还是 grep 正则表达式的强大过滤,亦或是重定向与管道的组合使用,这些技能构成了 Linux 系统管理和开发的基础能力。在实际应用中,建议结合具体场景灵活组合工具,同时注意大文件处理的性能优化,逐步提升文本处理的效率与技巧。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online