
expand 命令基本介绍expand用于将文本中的制表符Tab通常显示为\t转换为空格。它会根据当前列位置和指定的制表位计算需要替换的空格数量从而保持文本的视觉对齐效果。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a语法expand[选项][文件...]不指定文件时从标准输入读取。指定一个或多个文件时依次处理各文件。处理结果默认输出到标准输出不修改原文件。常用选项-t N、--tabsN将制表位设置为每隔N列一次。-t LIST、--tabsLIST指定多个制表位例如4,8,12。-t N1,N2,...指定多个绝对制表位最后一个制表位之后按最后一个间隔继续扩展。-i、--initial只将每行开头的 Tab 转换为空格行中间的 Tab 保留。--help显示帮助信息。--version显示版本信息。GNU Coreutils 的默认制表位通常为每 8 列一次。不同实现的扩展选项可能略有差异。基本用法1. 将文件中的 Tab 转为空格expandfile.txt处理结果输出到终端原文件不会改变。2. 将结果保存到新文件expandfile.txtfile_spaces.txt3. 使用管道输入printfName\tAge\nAlice\t20\nBob\t25\n|expand4. 指定每 4 列一个制表位expand-t4file.txt5. 指定多个制表位expand-t4,8,12 file.txt前 3 个制表位分别位于第 4、8、12 列。6. 只处理每行开头的 Tabexpand-ifile.txt适合只想规范化缩进、但不想改变表格正文中 Tab 的场景。制表位规则默认制表位如果不指定-t通常每隔 8 列设置一个制表位列 1 列 9 列 17 |----------|----------|实际替换时Tab 会被转换为到下一个制表位所需数量的空格而不是固定数量的空格。固定间隔制表位expand-t4file.txt表示制表位位于第 4、8、12、16……列。绝对制表位列表expand-t4,10,20 file.txt制表位依次位于第 4、10、20 列超过最后一个位置后GNU 实现通常按最后的间隔继续计算。使用示例1. 规范化源代码缩进expand-t4source.csource_spaces.c将 Tab 缩进转换为 4 列制表位对应的空格。2. 格式化 TSV 数据expand-t16,32,48 data.tsv将 Tab 分隔数据转换为固定列位置的空格格式。3. 配合column查看表格expand-t4,16,32 data.txt|column-t先将 Tab 转为空格再进行表格排列。4. 处理多个文件expand-t4file1.txt file2.txt按顺序处理多个输入文件结果合并输出。5. 通过管道处理命令输出printfPID\tCOMMAND\tSTATUS\n1\tinit\trunning\n|expand-t8,246. 仅展开缩进 Tabexpand-i-t2script.shscript_spaces.sh只转换行首 Tab保留正文中的 Tab。在脚本中使用批量转换文件#!/bin/bashset-euopipefailforfilein*.txt;doexpand-t4$file$file.tmpmv$file.tmp$filedone检查文件中是否仍存在 Tab#!/bin/bashset-euopipefailFILE$1expand$FILE|cmp-s-$FILE此命令用于判断文件内容在 Tab 转换后是否与原文件相同返回0文件中没有会产生变化的 Tab。返回1文件中存在 Tab转换结果不同。生成适合固定宽度显示的文本#!/bin/bashset-euopipefailinput$1output$2expand-t4,12,24$input$outputecho已生成$output与相关命令的对比命令作用转换方向expand将 Tab 转为空格Tab → 空格unexpand将空格转换为 Tab空格 → Tabcolumn对齐并格式化列排版sed通用文本替换可自定义tr字符级替换Tab → 固定空格expand与tr的区别expand会根据当前列位置计算空格数能保持制表位对齐。tr \t 通常只能将一个 Tab 替换为一个固定字符无法模拟制表位。需要正确处理不同列位置的 Tab 时应使用expand。expand与unexpand的区别expandfile.txt# Tab 转为空格unexpandfile.txt# 空格转为 Tab二者方向相反。unexpand可能只把行首空格或满足制表位规则的空格压缩为 Tab不能保证逐字节还原原始文件。退出状态0成功完成。非0发生错误例如输入文件不存在或选项无效。注意事项expand默认输出到标准输出不会原地修改输入文件需要覆盖原文件时应先输出到临时文件再替换。Tab 的视觉宽度取决于当前列位置和制表位设置不一定等于固定数量的空格。转换会改变文件内容因此可能影响 Git diff、哈希值、签名或依赖精确空白的程序。只处理缩进时使用-i避免修改正文中的 Tab。中文等宽度不一致的多字节字符可能影响终端显示效果expand主要按字节和列位置处理不是完整的终端排版工具。处理 TSV 时转换为可见空格会丢失原有的字段分隔语义如果后续程序需要 TSV应保留原文件。可通过man expand查看当前系统的完整文档。相关命令unexpand将空格转换为制表符。column将文本按列对齐显示。tabs设置终端的制表位。pr分页并按列打印文本。sed执行复杂的文本替换和处理。tr进行字符级转换。awk按字段处理文本。总结expand用于将 Tab 按制表位规则转换为空格能够保留文本的列对齐关系。最常用的用法是expand -t 4 file.txt将制表位设置为每 4 列一次如果只想处理缩进可以使用-i。该命令适合规范化源代码和生成固定空格文本但会改变原始内容处理前应确认后续流程是否依赖 Tab 或精确文件哈希。