// Linux · 2025-01-17

效率提升 200%!6 个 Linux 文本处理命令详解(paste、xargs、pr、join 、tr、fold)

在日常工作中,处理大量文本数据往往是一项繁琐的任务。幸运的是,Linux 提供了一系列强大的命令工具,能够帮助我们高效完成文本操作——从合并文件内容、格式化输出到数据转换,这些工具让复杂任务变得简单易行。本文将深入介绍 paste、xargs、pr、join、tr 和 fold 六个必备命令,掌握它们后,你的文本处理效率将显著提升!


1. paste:并排合并文件内容

1.1 命令简介

paste 是一个简单高效的工具,用于将多个文件的内容按行并排合并,默认以制表符(Tab)分隔。它特别适用于处理多列数据、生成表格或合并日志文件。

1.2 基本语法

paste [选项] 文件1 [文件2 ...]

1.3 常用选项

  • -d DELIM:指定分隔符(如 -d "," 或循环列表 -d ",;")。
  • -s:串联模式,将每个文件内容合并为一行。
  • -z 或 --zero-terminated:以空字符(null)分隔行。
  • --help:显示帮助信息。
  • --version:显示版本信息。

1.4 基础示例

假设有两个文件:
file1.txt:

apple
banana
cherry

file2.txt:

red
yellow
pink

示例 1:默认合并

paste file1.txt file2.txt

输出:

apple   red
banana  yellow
cherry  pink

解析:默认以制表符分隔两列。

示例 2:自定义分隔符

paste -d":" file1.txt file2.txt

输出:

apple:red
banana:yellow
cherry:pink

示例 3:串联为一行

paste -s file1.txt file2.txt

输出:

apple   banana  cherry
red     yellow  pink

1.5 进阶用法

示例 4:多文件合并

新增 file3.txt:

sweet
sour
bitter
paste -d"," file1.txt file2.txt file3.txt

输出:

apple,red,sweet
banana,yellow,sour
cherry,pink,bitter

示例 5:循环分隔符

paste -d ",;" file1.txt file2.txt

输出:

apple,red
banana;yellow
cherry,pink

解析:分隔符按顺序循环使用。

示例 6:处理空字符分隔

printf "line1\0line2\0" | paste -z - file1.txt

输出(以空字符分隔):

line1   apple
line2   banana

1.6 实际应用场景

  • 日志合并:将多设备日志按时间并排对比。
  • 数据预处理:合并单列数据为多列,方便导入表格。
  • 脚本输出整理:将多行结果串联为一行。

2. xargs:批量处理

2.1 命令简介

xargs 是 Linux 中处理管道数据的核心工具,它从标准输入读取内容并将其转化为命令参数,在批量操作中表现出色,适用于文件管理、数据转换等场景。

2.2 基本语法

xargs [选项] 命令

2.3 常用选项

  • -n NUM:每次传递的参数数量。
  • -d DELIM:指定输入分隔符(默认空格或换行)。
  • -0:以空字符分隔输入。
  • -I STR:指定替换字符串(如 {}),灵活插入输入。
  • -t:显示执行的命令,便于调试。
  • -p:交互模式,执行前确认。
  • -r 或 --no-run-if-empty:输入为空时不执行。
  • --help:显示帮助信息。

2.4 基础示例

files.txt:

doc1.txt doc2.txt
doc3.txt doc4.txt

示例 1:基本用法

cat files.txt | xargs ls

输出:

doc1.txt  doc2.txt  doc3.txt  doc4.txt

示例 2:限制参数数量

cat files.txt | xargs -n 1 ls

输出:

doc1.txt
doc2.txt
doc3.txt
doc4.txt

示例 3:处理特殊字符

files.txt:

"file with space.txt"
"another file.txt"
cat files.txt | xargs -d '\n' ls

输出:

file with space.txt  another file.txt

2.5 进阶用法

示例 4:使用 -I 自定义操作

复制文件并添加后缀:

cat files.txt | xargs -I {} cp {} {}.bak

结果:生成 doc1.txt.bak 等备份文件。

示例 5:交互模式

echo "file1.txt file2.txt" | xargs -p rm

输出:

rm file1.txt file2.txt ?... (输入 y 确认)

示例 6:批量删除空文件

find . -type f -empty | xargs -r rm -v

输出:

removed './empty1.txt'
removed './empty2.txt'

2.6 实际应用场景

  • 批量文件管理:移动、删除或重命名文件。
  • 日志清理:结合 find 删除过期文件。
  • 数据处理:将多行输入转化为参数传递。

3. pr:格式化输出

3.1 命令简介

pr 专注于文本格式化,支持分页、多列输出和标题添加,非常适合准备打印文档或整理长数据。

3.2 基本语法

pr [选项] 文件

3.3 常用选项

  • -t:去掉标题和页脚。
  • -s DELIM:指定列分隔符。
  • -n NUM:设置每页行数。
  • -w WIDTH:设置页面宽度。
  • -h HEADER:自定义页眉。
  • -m:并排显示多个文件。
  • -NUMBER:按列数分栏(如 -2 表示两列)。
  • --help:显示帮助信息。

3.4 基础示例

file.txt:

line1
line2
line3
line4
line5
line6

示例 1:分页输出

pr -n 3 file.txt

输出:

2025 Mar 26  Page 1

line1
line2
line3

2025 Mar 26  Page 2

line4
line5
line6

示例 2:多列输出

pr -t -s, -3 file.txt

输出:

line1,line2,line3
line4,line5,line6

3.5 进阶用法

示例 3:自定义标题和宽度

pr -h "Report" -w 20 file.txt

输出:

2025 Mar 26  Report  Page 1

line1
line2
line3
line4
line5
line6

示例 4:并排多个文件

pr -m -t file1.txt file2.txt

输出:

apple   red
banana  yellow
cherry  pink

示例 5:两栏布局

pr -2 -t file.txt

输出:

line1           line4
line2           line5
line3           line6

3.6 实际应用场景

  • 文档准备:格式化日志或报告以便打印。
  • 数据展示:将长列表整理为多列。
  • 多文件对比:并排显示多个文件内容。

4. join:合并表格数据

4.1 命令简介

join 用于合并两个文件中具有相同键值的行,类似于数据库的内连接,非常适合处理结构化数据。

4.2 基本语法

join [选项] 文件1 文件2

4.3 常用选项

  • -1 FIELD:指定文件 1 的键字段。
  • -2 FIELD:指定文件 2 的键字段。
  • -t DELIM:指定字段分隔符。
  • -o FORMAT:自定义输出格式。
  • -a FILENUM:显示未匹配的行(1 或 2)。
  • -i:忽略大小写。
  • --help:显示帮助信息。

4.4 基础示例

file1.txt:

1 Alice
2 Bob
3 Charlie

file2.txt:

1 A
2 B
3 A

示例 1:默认合并

join file1.txt file2.txt

输出:

1 Alice A
2 Bob B
3 Charlie A

示例 2:自定义分隔符

file1.csv:

1,Alice
2,Bob

file2.csv:

1,A
2,B
join -t',' file1.csv file2.csv

输出:

1,Alice,A
2,Bob,B

4.5 进阶用法

示例 3:指定字段输出

join -o 1.2,2.2 file1.txt file2.txt

输出:

Alice A
Bob B
Charlie A

示例 4:显示未匹配行

file2.txt 缺少第 3 行:

join -a 1 file1.txt file2.txt

输出:

1 Alice A
2 Bob B
3 Charlie

示例 5:忽略大小写

file1.txt:

A Alice
b Bob

file2.txt:

a A
B B
join -i file1.txt file2.txt

输出:

A Alice A
b Bob B

4.6 实际应用场景

  • 数据分析:合并用户数据与行为记录。
  • 日志处理:按时间戳合并多源日志。
  • 数据校验:找出未匹配记录。

5. tr:字符处理

5.1 命令简介

tr 专注于字符级别的转换、删除或压缩,是文本清洗的利器,支持字符集操作,简单高效。

5.2 基本语法

tr [选项] 原字符集 目标字符集

5.3 常用选项

  • -d:删除指定字符集中的字符。
  • -s:压缩重复字符为单个字符。
  • -c:取反字符集,仅处理未指定的字符。
  • -t:截断原字符集以匹配目标字符集长度。
  • --help:显示帮助信息。

5.4 基础示例

file.txt:

Hello   World

示例 1:大小写转换

cat file.txt | tr 'A-Z' 'a-z'

输出:

hello   world

示例 2:删除字符

cat file.txt | tr -d ' '

输出:

HelloWorld

示例 3:压缩重复字符

cat file.txt | tr -s ' '

输出:

Hello World

5.5 进阶用法

示例 4:取反操作

保留字母和换行:

echo "Hello, World! 123" | tr -cd '[:alpha:]\n'

输出:

HelloWorld

示例 5:截断字符集

echo "ABCDE" | tr -t 'ABC' '123'

输出:

123DE

示例 6:替换分隔符

echo "a,b,c" | tr ',' '\t'

输出:

a       b       c

5.6 实际应用场景

  • 文本清洗:移除多余空格或不可打印字符。
  • 格式调整:统一分隔符或大小写。
  • 数据提取:保留特定字符类型。

6. fold:文本折叠

6.1 命令简介

fold 用于将长行文本按指定宽度折叠换行,使文本更易阅读和适配显示设备,特别适合处理超宽行。

6.2 基本语法

fold [选项] [文件]...

6.3 常用选项

  • -w WIDTH 或 --width=WIDTH:指定每行最大宽度(默认 80)。
  • -s 或 --spaces:在空格处换行,避免拆分单词。
  • -b 或 --bytes:以字节而非字符计算宽度。
  • --help:显示帮助信息。
  • --version:显示版本信息。

6.4 基础示例

testfile:

This is a very long line that needs to be folded for better readability.

示例 1:按宽度折叠

fold -w 20 testfile

输出:

This is a very long 
line that needs to b
e folded for better 
readability.

示例 2:在空格处换行

fold -s -w 20 testfile

输出:

This is a very long
line that needs to
be folded for better
readability.

示例 3:按字节折叠

fold -b -w 10 testfile

输出:

This is a 
very long 
line that 
needs to b
e folded f
or better 
readability.

6.5 进阶用法

示例 4:处理管道输入

echo "ThisIsAVeryLongStringWithoutSpaces" | fold -w 10

输出:

ThisIsAVer
yLongStrin
gWithoutSp
aces

示例 5:适配终端宽度

cat testfile | fold -s -w $(tput cols)

解析:使用 tput cols 获取终端宽度并折叠。

示例 6:批量处理文件

fold -s -w 30 *.txt > output.txt

解析:将所有 .txt 文件折叠后合并输出。

6.6 实际应用场景

  • 终端显示优化:将长行适配屏幕宽度。
  • 文本预处理:为打印或格式化工具准备数据。
  • 脚本输出调整:控制日志或结果的行宽。

学习建议

  • 循序渐进:从基础用法入手,逐步掌握每个选项的功能。
  • 组合应用:通过管道将这些命令串联,解决复杂问题。
  • 实践为王:在真实场景中练习,如日志分析或数据预处理。

这些工具不仅能显著提升文本处理效率,还能激发你的创造力。熟练掌握它们,你将轻松应对各种文本处理挑战!

原文 https://blog.csdn.net/2301_79518550/article/details/145210430