【问题标题】:OS X Terminal: tr: how to add multiple carriage returns?OS X 终端:tr:如何添加多个回车符?
【发布时间】:2013-08-21 16:07:36
【问题描述】:

我有一个格式如下的文件:

> ABC
1
2
> DEF
3
4

我想用 tr 将每个 > 替换为 4 个回车,所以看起来像:

 ABC
1
2




 DEF
3
4

我在终端中尝试了以下操作:cat input | tr ">" "\n\n\n\n" > output 但是,这只会在两个数据块之间添加一个回车,如下所示:

 ABC
1
2

 DEF
3
4

如何让它识别多个回车符?谢谢!

【问题讨论】:

  • 在 unix 格式的文本文件(您似乎正在处理)中,换行符由换行符(又名换行符或 /n^J)表示,而不是回车符(\r^M)。

标签: macos terminal newline carriage-return tr


【解决方案1】:

tl;dr

tr 是错误的工具;试试别的东西(比如 sed)


tr(文本替换)只进行 1:1 替换 - 所以它一次只会用另一个字符替换一个字符。我认为您当前的命令将 > 替换为 /n,>> 替换为 /n/n,>>> 替换为 /n/n/n,>>>> 替换为 /n/n/n/n。

尝试使用 sed,可能是这样的(未经测试!):

cat input | sed $'s/>/\\\n\\\n\\\n\\\n/g' > output

【讨论】:

  • OS X 版本的sed 不会像\n 那样解释转义序列,但您可以使用$'...' 让shell 解释它们,然后再将它们交给sed。然后您必须转义换行符以保持sed 快乐,并转义 那些 转义以使外壳通过它们...最终看起来像这样:sed $'s/>/\\\n\\\n\\\n\\\n/g' input >output
  • 是的,或者使用 awk 中的等价物,它确实理解 \n 字符,即 cat input | awk '{printf("%s\n\n\n\n", $0)}' (未经测试,但很接近)。 ....祝大家好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2021-03-14
  • 1970-01-01
  • 2017-09-11
  • 2017-06-12
  • 2012-01-10
  • 2020-12-11
相关资源
最近更新 更多