方法1:使用 tr
命令(简单替换)
tr
(translate)是专用于字符替换的工具,适合基础场景:
# 处理文件内容 tr ' ' '\n' < input.txt > output.txt
输出结果:
apple
banana
cherry
特点:
- 单行命令即可完成,适合快速处理。
- 默认仅处理空格,不包含制表符(Tab)或其他空白符。
方法2:使用 sed
命令(处理复杂空白)
sed
(流编辑器)支持正则表达式,可应对连续空格或混合空白符:
# 将单个/连续空格替换为换行 echo "apple banana cherry" | sed 's/ \+/\n/g' # 同时替换空格和制表符(Tab) sed 's/[[:space:]]\+/\n/g' input.txt > output.txt
关键参数解析:
s/ \+/\n/g
:\+
匹配一个或多个连续空格,g
表示全局替换。[[:space:]]
:POSIX字符集,匹配所有空白符(包括空格、Tab等)。
方法3:使用 awk
命令(按列处理)
awk
擅长按字段重组文本,适合结构化数据:
# 将每行按空格分割后逐字段换行输出 echo "apple banana cherry" | awk '{for(i=1;i<=NF;i++) print $i}' # 处理文件并保留原格式 awk '{for(i=1;i<=NF;i++) print $i}' input.txt > output.txt
逻辑说明:
NF
:当前行的字段总数(默认以空格为分隔符)。for(i=1;i<=NF;i++)
:遍历每个字段并独立输出。
注意事项与进阶技巧
-
特殊字符处理:
- 若文本包含标点符号(如
a,b
),需先清理无关字符:echo "a,b c" | tr ',' ' ' | tr ' ' '\n'
- 若文本包含标点符号(如
-
保留空行与格式:
sed
和awk
默认不处理空行,需添加条件判断:awk '{if (NF==0) print ""; else for(i=1;i<=NF;i++) print $i}' input.txt
-
性能对比:
- 大文件处理:
tr
>sed
>awk
(tr
速度最快)。 - 复杂匹配:
sed
和awk
更灵活。
- 大文件处理:
总结建议
- 基础场景:用
tr ' ' '\n'
简洁高效。 - 不规则空白:用
sed 's/[[:space:]]\+/\n/g'
全面覆盖。 - 结构化数据:用
awk
按列重组。
引用说明参考 GNU Coreutils 官方文档(tr、sed、awk)及 Linux man-pages 技术手册,确保方法符合POSIX标准,适用于主流Linux发行版(Ubuntu/CentOS等)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4577.html