Linux Shell文本处理神器合集:15个工具+实战例子,效率直接翻倍
在Linux系统中,文本是数据交互的“通用语言”——日志文件、配置文件、数据报表、程序输出几乎都以文本形式存在。手动编辑文本不仅繁琐,还容易出错,而掌握Shell文本处理工具,能让你用几行命令完成批量筛选、数据提取、统计分析,甚至复杂的文本清洗。
今天就带你盘点15个最常用的Linux文本处理工具,每个工具都附核心作用、常用选项和实战场景,从基础到进阶,看完就能直接上手!
一、基础工具:文本操作的“基石”
这类工具是文本处理的“入门必备”,解决最常见的“查看、统计、拼接”需求,用法简单但高频使用。
1.cat:文本拼接与查看的“瑞士军刀”
核心作用:查看文件内容、拼接多个文件、创建简单文本文件。
常用场景:快速查看短文件、合并日志片段、往文件追加内容。
实战例子:
| # 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
|
2.head/tail:文件首尾内容的“截取器”
核心作用: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
|
3.wc:文本统计的“计算器”
核心作用:统计文件的行数、单词数、字节数,是数据汇总的基础工具。
常用选项:
•-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
|
二、筛选工具:精准定位文本内容
这类工具帮你从海量文本中“捞取”关键信息,避免逐行查找的低效。
4.find:文件搜索的“定位雷达”
核心作用:按路径、名称、类型、时间、权限等条件搜索文件,是“找文件”的第一选择。
常用选项:
•-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
|
5.grep:文本内容的“搜索侦探”
核心作用:按正则表达式匹配文本内容,从文件或输出中筛选关键信息(如日志中的错误、配置中的参数)。
常用选项:
•-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
|
6.cut:按列提取文本的“手术刀”
核心作用:按列分割文本(默认以制表符分隔,可指定分隔符),提取指定列的内容,适合处理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
|
7.paste:多文件文本的“拼接胶”
核心作用:将多个文件的内容按列拼接(默认以制表符分隔),适合合并结构化数据。
常用选项:
•-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
|
三、处理工具:文本清洗与转换的“利器”
这类工具帮你完成文本的“加工”——去重、排序、替换、删除,解决数据不规整的问题。
8.sort:文本排序的“整理师”
核心作用:按指定规则对文本行排序,支持数字、字母、日期等排序方式,常与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
|
9.uniq:文本去重的“过滤器”
核心作用:去除连续重复的行(注意:非连续重复需先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
|
10.tr:字符转换的“魔术师”
核心作用:字符替换、删除、压缩,支持单字符或字符集的转换,语法简洁但功能强大。
常用选项:
•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"
|
11.xargs:命令参数的“转换器”
核心作用:将标准输入(如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
|
四、进阶工具:复杂文本处理的“王牌”
这类工具支持脚本化操作,能处理更复杂的文本逻辑——替换特定行、条件筛选、数据计算等。
12.sed:文本流编辑的“瑞士军刀”
核心作用:按行处理文本(流编辑),支持替换、删除、插入、追加等操作,适合批量修改文本。
常用语法(基本格式: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
|
13.awk:文本分析的“编程语言”
核心作用:按列处理文本,支持条件判断、循环、计算,能完成复杂的数据分析(如统计、过滤、格式化),堪称“文本处理中的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
|
14.diff:文件对比的“找茬专家”
核心作用:比较两个文件的差异,显示不同的行,常用于版本对比、配置变更检查。
常用选项:
•-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
|
15.patch:文件补丁的“修复师”
核心作用:根据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
|
五、工具组合实战:1+1>2的效率技巧
单个工具能力有限,但组合起来能解决90%的复杂文本问题,以下是3个高频组合场景:
场景1:日志错误分析
需求:查找最近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按次数降序。
场景2:CSV数据清洗
需求:处理用户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
|
场景3:批量文件处理
需求:在项目目录中找所有.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脚本快得多!
