Linux Shell文本处理神器合集:15个工具+实战例子,效率直接翻倍 电子说
在 Linux 系统中,文本是数据交互的 “通用语言”—— 日志文件、配置文件、数据报表、程序输出几乎都以文本形式存在。手动编辑文本不仅繁琐,还容易出错,而掌握 Shell 文本处理工具,能让你用几行命令完成批量筛选、数据提取、统计分析,甚至复杂的文本清洗。
今天就带你盘点15 个最常用的 Linux 文本处理工具,每个工具都附核心作用、常用选项和实战场景,从基础到进阶,看完就能直接上手!

这类工具是文本处理的“入门必备”,解决最常见的 “查看、统计、拼接” 需求,用法简单但高频使用。
核心作用:查看文件内容、拼接多个文件、创建简单文本文件。
常用场景:快速查看短文件、合并日志片段、往文件追加内容。
实战例子:
|
# 1. 查看单个文件内容
cat /var/log/xsc_syslog
# 2. 合并2个日志文件到新文件
cat xsc_access.log xsc_error.log > xsc_combined.log
# 3. 往文件末尾追加内容(需谨慎,避免覆盖)
cat >> xsc_config.conf << EOF
# 新增配置项
timeout=300
EOF
|
核心作用:head查看文件开头(默认前 10 行),tail查看文件末尾(默认后 10 行),尤其适合大文件(如日志)。
常用选项:
•-n N:指定查看 N 行(如-n 20查看前 / 后 20 行);
•tail -f:实时跟踪文件更新(日志实时监控必备)。
实战例子:
|
# 1. 查看nginx配置文件前15行(注释和全局配置通常在开头)
head -n 15 /etc/nginx/xsc_nginx.conf
# 2. 实时监控tomcat日志(跟踪最新错误)
tail -f /usr/local/tomcat/logs/xsc_catalina.out
# 3. 查看文件最后5行(日志的最新记录)
tail -n 5 /var/log/xsc_auth.log
|
核心作用:统计文件的行数、单词数、字节数,是数据汇总的基础工具。
常用选项:
•-l:仅统计行数(最常用,比如“统计日志有多少条错误”);
•-w:统计单词数;
•-c:统计字节数;
•-m:统计字符数(支持中文等多字节字符)。
实战例子:
|
# 1. 统计当前目录下所有.sh脚本的总行数(代码量估算)
wc -l xsc_*.sh
# 2. 统计日志中包含"ERROR"的行数(错误数量统计)
grep "ERROR" xsc_app.log | wc -l
# 3. 统计配置文件的字符数(检查文件是否完整)
wc -m xsc_config.ini
|
这类工具帮你从海量文本中“捞取” 关键信息,避免逐行查找的低效。
核心作用:按路径、名称、类型、时间、权限等条件搜索文件,是“找文件” 的第一选择。
常用选项:
•-name "pattern":按文件名匹配(支持通配符,如xsc_*.log匹配所有带前缀的日志文件);
•-type f/d/l:按文件类型筛选(f = 普通文件,d = 目录,l = 软链接);
•-mtime -N:按修改时间筛选(-7表示最近 7 天内修改,+30表示 30 天前修改);
•-size +N:按文件大小筛选(+10M表示大于 10MB,-50k表示小于 50KB)。
实战例子:
|
# 1. 在/var/log目录下找所有带xsc_前缀的.log文件(日志文件汇总)
find /var/log -name "xsc_*.log" -type f
# 2. 找当前目录下最近3天修改过的带xsc_前缀的.sh脚本(定位近期编辑的脚本)
find . -name "xsc_*.sh" -type f -mtime -3
# 3. 找大于100MB的带xsc_前缀的日志文件(清理大文件前定位)
find /var/log -name "xsc_*.log" -type f -size +100M
|
核心作用:按正则表达式匹配文本内容,从文件或输出中筛选关键信息(如日志中的错误、配置中的参数)。
常用选项:
•-i:忽略大小写(如grep -i "error"匹配 ERROR/Error/error);
•-n:显示匹配行的行号(定位具体位置);
•-v:反向匹配(显示不包含指定内容的行,如grep -v "#"过滤注释);
•-r:递归搜索目录下所有文件(如grep -r "password" /etc/);
•-c:仅统计匹配行数(如grep -c "ERROR" xsc_app.log)。
实战例子:
|
# 1. 在nginx日志中找包含"404"的请求(定位页面不存在的链接)
grep "404" /var/log/nginx/xsc_access.log
# 2. 过滤配置文件中的注释和空行(查看有效配置)
grep -v -E "^#|^$" /etc/xsc_sysctl.conf
# 3. 递归搜索项目目录中包含"TODO"的带xsc_前缀的代码文件(定位待办事项)
grep -r -n "TODO" /home/project/xsc_*.c
|
核心作用:按列分割文本(默认以制表符分隔,可指定分隔符),提取指定列的内容,适合处理 CSV、日志等结构化文本。
常用选项:
•-d "sep":指定分隔符(如-d ","处理 CSV 文件,-d ":"处理 /etc/passwd);
•-f N:提取第 N 列(多列用逗号分隔,如-f 1,3提取第 1 和第 3 列);
•-c N:按字符位置提取(如-c 1-5提取前 5 个字符)。
实战例子:
|
# 1. 从/etc/passwd中提取用户名和登录Shell(第1列和第7列,冒号分隔)
cut -d ":" -f 1,7 /etc/xsc_passwd
# 2. 处理CSV文件,提取姓名和年龄(第2列和第3列,逗号分隔)
cut -d "," -f 2,3 xsc_user.csv
# 3. 提取日志中前10个字符(通常是时间戳)
cut -c 1-10 xsc_app.log
|
核心作用:将多个文件的内容按列拼接(默认以制表符分隔),适合合并结构化数据。
常用选项:
•-d "sep":指定列分隔符(如-d ","合并为 CSV 格式);
•-s:按行拼接(将单个文件的多行合并为一行,用分隔符连接)。
实战例子:
|
# 1. 合并姓名文件和年龄文件(xsc_name.txt每行对应xsc_age.txt每行)
paste -d "," xsc_name.txt xsc_age.txt > xsc_user_info.csv
# 2. 将多列日志合并为一行(用空格分隔)
paste -s -d " " xsc_log1.log xsc_log2.log xsc_log3.log
|
这类工具帮你完成文本的“加工”—— 去重、排序、替换、删除,解决数据不规整的问题。
核心作用:按指定规则对文本行排序,支持数字、字母、日期等排序方式,常与uniq配合去重。
常用选项:
•-n:按数字排序(默认按字符排序,如“10” 会排在 “2” 前面,-n可修正);
•-r:反向排序(从大到小 / 从 Z 到 A);
•-k N:按第 N 列排序(需指定分隔符,如-t ":" -k 3n按第 3 列数字排序);
•-u:去重(等价于sort | uniq,但效率更高)。
实战例子:
|
# 1. 按数字排序(统计结果排序,如日志错误次数)
sort -n xsc_error_count.txt
# 2. 按第2列数字反向排序(处理CSV文件,第2列是分数)
sort -t "," -k 2nr xsc_score.csv
# 3. 排序并去重(统计唯一IP)
sort -u xsc_access_ip.txt
|
核心作用:去除连续重复的行(注意:非连续重复需先sort排序),还能统计重复次数。
常用选项:
•-c:统计每行的重复次数(如uniq -c显示“次数 + 内容”);
•-d:仅显示重复的行;
•-u:仅显示不重复的行。
实战例子:
|
# 1. 统计日志中每个IP的访问次数(先排序再去重统计)
sort xsc_access.log | cut -d " " -f 1 | uniq -c
# 2. 显示重复的配置项(定位冗余配置)
sort xsc_config.conf | uniq -d
# 3. 显示仅出现一次的内容(定位唯一数据)
sort xsc_data.txt | uniq -u
|
核心作用:字符替换、删除、压缩,支持单字符或字符集的转换,语法简洁但功能强大。
常用选项:
•tr "a" "b":将所有字符 a 替换为 b;
•tr "[]" "[]":小写转大写(反之同理);
•tr -d "a":删除所有字符 a;
•tr -s " ":压缩连续的空格为单个空格(处理格式混乱的文本)。
实战例子:
|
# 1. 将日志中的小写字母转为大写(方便统一匹配)
cat xsc_app.log | tr "[]" "[]"
# 2. 删除文本中的所有标点符号(清理纯文本)
cat xsc_article.txt | tr -d "[]"
# 3. 压缩连续空格和换行(将多行文本整理为紧凑格式)
cat xsc_messy.txt | tr -s " n"
|
核心作用:将标准输入(如find的输出)转换为命令参数,解决“参数过长” 问题(如rm $(find ...)可能报错,find ... | xargs rm更安全)。
常用选项:
•-n N:每次传递 N 个参数给命令(如-n 5每次处理 5 个文件);
•-I {}:指定占位符(替换为输入的每个参数,适合复杂命令)。
实战例子:
|
# 1. 批量删除找到的临时文件(避免参数过长)
find . -name "xsc_*.tmp" -type f | xargs rm -f
# 2. 批量修改文件后缀(将xsc_*.txt改为xsc_*.md)
find . -name "xsc_*.txt" -type f | xargs -I {} mv {} {}.md
# 3. 批量统计.c文件的行数(每次处理2个文件)
find . -name "xsc_*.c" -type f | xargs -n 2 wc -l
|
这类工具支持脚本化操作,能处理更复杂的文本逻辑—— 替换特定行、条件筛选、数据计算等。
核心作用:按行处理文本(流编辑),支持替换、删除、插入、追加等操作,适合批量修改文本。
常用语法(基本格式:sed '命令' 文件):
•s/old/new/g:全局替换(将 old 替换为 new,g表示全局,不加g仅替换每行第一个);
•d:删除指定行(如sed '3d' file删除第 3 行,sed '/ERROR/d' file删除包含 ERROR 的行);
•i:在指定行前插入(如sed '2i # 新增注释' file在第 2 行前插入注释);
•-i:直接修改文件(建议加备份,如-i.bak保留原文件为 file.bak)。
实战例子:
|
# 1. 全局替换配置文件中的"old_ip"为"new_ip"(备份原文件)
sed -i.bak 's/old_ip/new_ip/g' xsc_config.conf
# 2. 删除日志中的空行和注释行(清理日志)
sed -e '/^$/d' -e '/^#/d' xsc_app.log
# 3. 在第5行后追加一行配置(如新增timeout)
sed '5a timeout=300' xsc_server.conf
|
核心作用:按列处理文本,支持条件判断、循环、计算,能完成复杂的数据分析(如统计、过滤、格式化),堪称“文本处理中的 Python”。
基本语法:awk '条件 {动作}' 文件(默认以空格 / 制表符分隔列,$N表示第 N 列,$0表示整行)。
常用选项:
•-F "sep":指定分隔符(如-F ","处理 CSV,-F ":"处理 /etc/passwd);
•-v var=val:定义变量(如-v sum=0定义求和变量)。
实战例子:
|
# 1. 统计日志中每个IP的访问次数(等价于sort+cut+uniq,但更简洁)
awk '{ip[$1]++} END{for(i in ip) print i, ip[i]}' xsc_access.log
# 2. 筛选CSV文件中分数大于80的行(第3列是分数)
awk -F "," '$3 > 80 {print $2, $3}' xsc_score.csv
# 3. 计算文件第2列的总和(如统计所有文件的大小)
awk '{sum += $2} END{print "Total size:", sum, "KB"}' xsc_file_size.txt
|
核心作用:比较两个文件的差异,显示不同的行,常用于版本对比、配置变更检查。
常用选项:
•-u:生成统一格式的差异(便于阅读和打补丁,diff -u old.conf new.conf);
•-r:递归比较目录下所有文件(如diff -r dir1 dir2)。
实战例子:
|
# 1. 比较两个配置文件的差异(查看修改内容)
diff -u xsc_old_nginx.conf xsc_new_nginx.conf
# 2. 递归比较两个项目目录的文件差异(定位代码变更)
diff -r /home/project/xsc_v1 /home/project/xsc_v2
|
核心作用:根据diff生成的差异文件(补丁),更新旧文件到新状态,常用于代码更新、配置同步。
常用语法:patch 旧文件 补丁文件
实战例子:
|
# 1. 用diff生成的补丁更新旧配置文件
diff -u xsc_old.conf xsc_new.conf > xsc_conf.patch # 生成补丁
patch xsc_old.conf xsc_conf.patch # 应用补丁
# 2. 撤销补丁(恢复到原文件)
patch -R xsc_old.conf xsc_conf.patch
|
单个工具能力有限,但组合起来能解决 90% 的复杂文本问题,以下是 3 个高频组合场景:
需求:查找最近 7 天修改的 nginx 日志,统计其中 “500 错误” 的 IP 及其出现次数,按次数降序排列。
命令组合:
|
find /var/log/nginx -name "xsc_access.log*" -type f -mtime -7
| xargs grep " 500 "
| awk '{print $1}'
| sort | uniq -c
| sort -nr
|
拆解:find找日志→xargs grep筛 500 错误→awk提 IP→sort+uniq统计次数→sort -nr按次数降序。
需求:处理用户 CSV 文件,筛选年龄大于 25 的用户,提取姓名和邮箱,按姓名首字母排序,去重后保存为新文件。
命令组合:
|
cut -d "," -f 2,3,5 xsc_user.csv # 提取姓名(2)、年龄(3)、邮箱(5)
| awk -F "," '$2 > 25 {print $1 "," $3}' # 筛年龄>25,保留姓名+邮箱
| sort -t "," -k 1 # 按姓名排序
| uniq # 去重
> xsc_filtered_user.csv
|
需求:在项目目录中找所有.c文件,删除其中的“TODO” 注释行,备份原文件。
命令组合:
|
find /home/project -name "xsc_*.c" -type f
| xargs sed -i.bak '/TODO/d'
|
拆解:find找.c 文件→xargs sed删除 TODO 行,-i.bak备份原文件。
Linux 文本处理的精髓在于 “管道(|)+ 组合”—— 用管道将工具串联,让前一个工具的输出作为后一个工具的输入,就能把复杂任务拆解成多个简单步骤。
•「找文件」用find,「找内容」用grep;
•「按列处理」用cut/awk,「排序去重」用sort/uniq;
•「批量修改」用sed/xargs,「复杂计算」用awk。
建议从日常场景入手(比如分析日志、整理数据),慢慢积累自己的“命令模板”。熟练后,你会发现:原来用 Shell 处理文本,比打开 Excel 或写 Python 脚本快得多!
全部0条评论
快来发表一下你的评论吧 !