Ubuntu 20.04 bash下将文件换行符替换为 || 失败求错误原因及解决方案
问题原因分析
tr是单字符替换工具,仅支持单个字符到单个字符的一一映射,你要替换成的||是4字符的多字符组合(空格+双竖线+空格),完全超出了tr的能力范围。- 你之前执行的三条tr命令,实际只会把换行符替换成替换集的第一个字符(空格),不可能得到你要的双竖线分隔效果。
可行实现方案
方案1:使用sed(GNU环境适配,Ubuntu默认可用)
如果允许最后一行末尾临时保留||,直接执行:
sed -z 's/\n/ || /g' input.txt
如果需要去掉末尾多余的||,执行:
sed -z 's/\n/ || /g; s/ || $//' input.txt
方案2:使用awk(POSIX全兼容,适配所有类Unix环境)
awk '{printf "%s", sep $0; sep=" || "} END{print ""}' input.txt
该方案自动规避了末尾多余分隔符的问题,不需要额外做后处理。
方案3:使用perl
perl -0777 -pe 's/\n/ || /g' input.txt
内容的提问来源于stack exchange,提问作者usert4jju7
相关产品推荐
相关产品推荐

