【问题标题】:Shell 'tr' command returns a new empty lineShell 'tr' 命令返回一个新的空行
【发布时间】:2017-09-22 08:02:47
【问题描述】:

我在 Unix 中遇到了 trim 命令的问题。我有一个从 windows excel 保存的 original.csv 文件,我想移植到 Unix 中使用。从windows保存的original.csv中的内容是这样的:

Func,Failing Cycle
rtg_generic_A_A1_N2_cb_TEST_1_sm32,859180
rtg_generic_A_A1_N3_cb_TEST_1_sm32,859180
rtg_generic_A_A3_N5_dw_cb_TEST_1_sm32,788581 

我想剪掉里面的回车,所以我输入了命令:

tr '\r\n' '\n' < original.csv >trimmed.csv

但是 trimmed.csv 中的内容看起来像:

Func,Failing Cycle

rtg_generic_A_A1_N2_cb_TEST_1_sm32,859180

rtg_generic_A_A1_N3_cb_TEST_1_sm32,859180

rtg_generic_A_A3_N5_dw_cb_TEST_1_sm32,788581

似乎在两者之间添加了额外的空行。我可以知道为什么以及如何摆脱这个空行吗?

谢谢

【问题讨论】:

    标签: shell csv unix


    【解决方案1】:

    这个命令:

    tr '\r\n' '\n'` < file
    

    \r 的每个实例翻译成\n,因为tr 逐个字符翻译。这将使每行以 2 \n 结尾。

    要删除回车,可以使用tr命令:

    tr -d '\r' < file
    

    【讨论】:

    • 所以不是把整个 '\r\n' 换成 '\n' 吗?
    • 不,不是。使用tr -d '\r' &lt; file 删除回车。 \n 已经存在了。
    • 谢谢。我明白了。它只是将 '\r' 替换为 '\n'。因此 '\n\n' 然后我会看到一个空行。但是为什么它仍然在 '\r' 旁边保留那个 '\n' 呢?谢谢
    • 是的,这正是正在发生的事情。
    • 谢谢...我明白你的想法...它用 arg2 代替 arg1 中的每个词法...这就是为什么它带有 2 '\n'
    【解决方案2】:

    要将行尾从 Windows 转换为 Unix,您还可以使用 dos2unix 命令

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2013-01-22
      • 2013-11-09
      • 2012-09-24
      相关资源
      最近更新 更多