Linux Shell文本处理神器合集:15个工具+实战例子,效率直接翻倍

电子说

1.4w人已加入

描述

 

 

 Linux 系统中,文本是数据交互的 通用语言”—— 日志文件、配置文件、数据报表、程序输出几乎都以文本形式存在。手动编辑文本不仅繁琐,还容易出错,而掌握 Shell 文本处理工具,能让你用几行命令完成批量筛选、数据提取、统计分析,甚至复杂的文本清洗。

 

 

 

今天就带你盘点15 个最常用的 Linux 文本处理工具,每个工具都附核心作用、常用选项和实战场景,从基础到进阶,看完就能直接上手!

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 和第 列);

 

 

-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:反向排序(从大到小 / 从 到 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 替换为 newg表示全局,不加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% 的复杂文本问题,以下是 个高频组合场景:

 

 

场景 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按次数降序。

 

 

场景 2CSV 数据清洗

 

需求:处理用户 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 脚本快得多!

 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分