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

如何合并所有文本行?tr/paste/sed命令报错求助

解决文本行合并问题

先逐个拆解你遇到的命令失效原因,再给出可行的解决方案:

你的命令为什么没用?

  1. tr '\n' ''报错:tr的替换模式要求第二个参数不能是空字符串(POSIX标准强制规定),你要的是删除换行符,而非替换,得用删除模式。
  2. paste -sd '' -报错:不同系统的paste实现有差异,比如BSD/macOS版的paste不允许直接传空字符串当分隔符,而你的环境刚好是这类系统。
  3. sed 's/\n//'无效:sed默认按单行处理,每行内部不存在换行符,这个替换规则根本碰不到行与行之间的换行。

可行解决方法

方法1:用tr删除换行符(最简洁通用)

直接用tr -d模式删除所有换行符,这是跨系统通用的写法:

echo 'one\ntwo' | tr -d '\n'

输出结果:onetwo

方法2:适配多系统的paste写法

如果要兼容BSD/macOS的paste,可以用空字符作为分隔符,GNUpaste也支持这个写法:

echo 'one\ntwo' | paste -sd '\0' -

Linux环境下的GNUpaste也可以直接用你最初的写法:paste -sd '' -

方法3:用sed跨行处理换行

通过sed的多行模式把所有内容读入后统一替换换行:

echo 'one\ntwo' | sed ':a;N;$!ba;s/\n//g'

逻辑::a定义循环标签,N读取下一行到当前缓冲区,$!ba非最后一行就循环读取,最后s/\n//g替换所有换行。

方法4:用awk无换行输出

利用awk的printf或者修改输出记录分隔符:

# 写法一
echo 'one\ntwo' | awk '{printf "%s", $0}'
# 写法二(更简洁)
echo 'one\ntwo' | awk -v ORS='' 1

方法5:用printf直接输出

借助命令替换把多行内容传给printf,让它无换行输出:

printf "%s" "$(echo 'one\ntwo')"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:35:49