You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中用sed或tr将制表符转为ASCII单元分隔符输出

制表符转ASCII单元分隔符的正确命令

你之前尝试的命令无效,核心原因是tr和sed都不会直接解析字符串形式的十六进制(如0x09)为控制字符,以下是正确的实现方式:

使用tr命令

tr支持用转义序列表示控制字符,制表符可以用\t,ASCII单元分隔符(0x1f)对应的八进制转义是\037(多数系统的tr默认支持八进制转义),命令如下:

tr '\t' '\037' < 输入文件名 > 输出文件名

如果想直接用十六进制指定目标字符,可以借助printf生成:

tr '\t' "$(printf '\x1f')" < 输入文件名 > 输出文件名

使用sed命令

不同版本的sed语法略有差异:

  • GNU sed(Linux系统默认)支持十六进制转义\x,直接写:
sed 's/\t/\x1f/g' 输入文件名 > 输出文件名
  • BSD sed(如macOS系统)需要用八进制转义\0,命令为:
sed 's/\t/\037/g' 输入文件名 > 输出文件名

为什么之前的命令失效?

  • 你写的tr 0x09 0x1f或tr '0x09' '0x1f',tr会把0x09和0x1f当成普通的字符串字符处理,根本不会匹配到制表符;
  • sed命令里的s#0x09#0x1f#g是在替换字符串"0x09"为"0x1f",而非对应的控制字符,自然没有效果。

内容的提问来源于stack exchange,提问作者njamescouk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:38:14