【问题标题】:dos2unix doesn't convert ^Mdos2unix 不转换 ^M
【发布时间】:2014-07-12 18:33:53
【问题描述】:

我从在 Windows 7 上运行的程序中将结果导出为文本文件,并在 Xubuntu 14.04 上复制了该文件。在终端中,我运行了dos2unix file.txt,它告诉我converting file out_mapqtl.txt to Unix format。但是,当我使用less 查看文件时,我仍然看到 Windows 行尾为 ^M,并且wc -l 返回“0”。

我尝试了here 描述的几件事,但没有一个有效。然后我在 Vim 中打开文件并按照there 的说明执行:%s/\r/\r/g,效果很好。那么知道为什么 dos2unix 不起作用吗?有没有办法避免每次都打开 Vim?

【问题讨论】:

  • 这里有点晚了...但是我写了一个小程序,当您不确定输入格式或输入格式混合时,它比 dos2unix 更轻松:github.com/mdolidon/endlines跨度>
  • @MathiasDolidon 谢谢你,马蒂亚斯!

标签: vim dos2unix


【解决方案1】:

\r 表示回车,在 MAC 上使用不带\n 表示换行符。您确定文件是 DOS (\r\n) 格式而不是 MAC (\r) 格式吗?

如果 VIM 真的是唯一能修复文件的东西,你也可以这样调用它:

vim somefile.txt +"%s/\r/\r/g" +wq

这将打开文件,执行操作,保存,然后退出。

您能否给我们一个文件示例,以便我们进一步调查?

【讨论】:

  • 抱歉我的回答延迟了。该文件是在 Windows 7 上生成的,因此我假设它是 DOS 格式。我什至不确定该程序是否可以在 Mac 上运行。顺便说一下,这个程序叫做MapQTL。无论如何,我的问题现在已经解决了,谢谢。
  • 感谢您告知我们您的问题已解决,并接受我的解决方案作为答案。
  • 嗨,“%s/\r/\r/g”是做什么的?它看起来像 sed 表达式。用“\r”替换“\r”?
  • 是的,它就是这么做的。前面的% 将表达式应用于文件中的所有行。由于 VIM 的行尾处理魔法,这个看似无用的表达式显然起到了作用。
【解决方案2】:

试试这个:

tr -d '\r' < file

【讨论】:

    【解决方案3】:

    我知道您已经解决了这个问题,但我想根据我所做的一些测试添加一个注释以供参考。

    如果 less 显示 ^M,那么就像 Sybren 一样,我怀疑它是 MAC 样式结尾 (\r),而不是 DOS (\r\n)。您可以使用 cat 轻松确定:

    $ cat -e 文件名

    • Unix 结尾 (\n) 显示为 $
    • MAC 结尾 (\r) 显示为 ^M(较少显示这些)
    • DOS\Windows 结尾 (\r\n) 显示为 ^M$(less 似乎不显示这些)

    使用 dos2unix 去掉 DOS (^M$) 结尾

    使用 ma​​c2unix 去除 MAC (^M) 结尾 - dos2unix 不会去除这些。

    我有一个文件,我必须使用 dos2unix 和 mac2unix 来删除所有非 Unix 结尾。

    【讨论】:

    • 感谢您的回答,我在运行 dos2unix 时被难住了,没有意识到文件以某种方式使用了旧的 mac 行结尾。
    【解决方案4】:

    我使用过 Notepad++ 功能: 编辑>EOL 转换>Unix(LF)。

    现在使用 pscp.exe 将此文件导出到 Unix 机器。

    如果这对你有用,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多