【问题标题】:removing ^M from a csv file从 csv 文件中删除 ^M
【发布时间】:2015-04-06 14:44:49
【问题描述】:

当我尝试从 csv 中删除 ^M 时遇到问题

当我输入 vim 或 vi file.csv 时,我得到

A, TK,2015-04-06,14.4^M,14.7,10.0,0.0,54.0^M,13.3^M,135.0^M,33.8
B, NV,2015-04-06,14.4^M,14.7,5.4,0.0,47.0^M,14.8^M,97.0^M,31.3

我试过了

tr -d '^M' < file.csv > file2.csv

但它不会删除,sed 也是如此。

【问题讨论】:

  • tr -d '\r' &lt; file.csv &gt; file2.csv?
  • 是的,Etan,谢谢,现在我可以删除 ^M
  • 您是如何输入 ^M 的?您是使用 char ^ 后跟 char M(错误),还是使用 CTRL-V CTRL-M(正确)?
  • 这是您正在寻找的答案stackoverflow.com/questions/811193/…

标签: bash


【解决方案1】:

您可以使用提供的dos2unix 命令来执行此操作。

使用 GNU/sed 只是为了好玩:

sed -i -e "s/\r//g" file

使用tr

tr -d '\r' <file1 >file2

【讨论】:

    【解决方案2】:

    你可以试试:

    perl -pE 's/(\^M|\r)//g' < file >file2
    

    应该删除

    • 文字 ^M - ^M 两个字符的序列
    • ^M 作为\r 字符。

    【讨论】:

    • 我使用了perl -pE 's/(\^M|\r)//g' /var/tmp/screwed_csv_file.csv,然后我有一个正确的 CSV 文件。
    • 之后,我可以使用dev.mysql.com/doc/refman/5.7/en/…LOAD DATA。不是说MySQL有BUG吗?他们应该记录它还是应该被视为BUG?我花了 4 个小时才找到答案。
    【解决方案3】:

    你从哪里得到那个文件?它看起来像来自 Mac 的旧 System X 文件。旧的 pre-OSX 操作系统使用 &lt;CR&gt; 作为行尾。 Unix 使用&lt;LF&gt;,Windows/DOS 使用&lt;CRLF&gt;

    你有dos2unix。该程序可以将 Unix/Linux、DOS/Windows 或 System X Macs 的行尾转换为您想要的任何格式。在您的文件中,我认为您需要将 ^M 转换为 Control Ms 而不是 Caret-MNL 个字符。

    【讨论】:

    • 顺便说一句,要做到这一点,你需要把dos2unix放入Mac转换模式:dos2unix -c mac &lt;filename&gt;
    猜你喜欢
    • 2016-07-29
    • 2021-12-23
    • 2011-05-03
    • 2023-01-12
    • 2020-03-18
    • 2010-10-13
    • 2016-11-05
    相关资源
    最近更新 更多