13

在 C# 模块中,我想使用 Tectia 将文件从 Windows 传输到 Unix。但问题是当这些文件被传输(Ascii 或二进制模式)并使用 VI 编辑器打开时,我们会得到 ^M 字符。我对此进行了搜索,但解决方案是在使用实用程序传输文件后删除这些 ^M 字符。有什么方法可以使这些 ^M 字符不首先出现。在发送这些文件之前,是否有任何选项可以在代码中使用解决方法?

4

10 回答 10

22

我如何能够在 vi 编辑器中删除它:

  • 然后:%s/ctrl+V然后ctrl+ 。M这会给你^M
  • 然后//g (看起来像:):%s/^MEnter应该全部删除。

祝你好运!

于 2014-03-24T22:13:28.577 回答
14

您可以安装和使用dos2unix。安装后只需运行:

>dos2unix yourfile.txt 
于 2012-09-20T07:45:51.687 回答
14

如果您只需要删除^M字符(而不是用 替换它们\n):

sed -i -e 's/\r//g' yourfile.txt

如果您想将它们替换为\n

sed -i -e 's/\r/\n/g' yourfile.txt
于 2016-08-19T15:34:17.037 回答
5

在 vi 编辑器中删除Ctrl+的另一个技巧:M

:%s/^V^M//g

有关删除Ctrl+M字符的更多技巧

于 2013-03-10T09:31:08.857 回答
3

尝试在终端中执行以下命令(可能需要先安装):

fromdos <your-file>
于 2012-09-20T10:29:04.007 回答
1

谢谢各位的帮助。我使用解决方法解决了这个问题。Windows 使用 CR+LF (\r\n) 作为行尾,Unix 使用 LF (\n) 作为行尾。我拿了 Windows 文件并替换了 CR+LF(\r\n ) 在代码本身中使用 LF(\n) 没有任何实用程序。这使文件与 Unix 系统兼容,然后我使用 SFTP 传输文件,它在没有 ^M 字符的情况下在 Unix 上工作。

于 2012-09-28T06:23:30.883 回答
1
:%s/^V^M//
  1. g根本不需要。

  2. %s- 查找并替换您想要替换的文本

  3. ^V^M替换为“应该在双斜杠之后”如果您想替换为空,请将其保留为空

于 2013-10-26T10:30:56.510 回答
1

尝试

tr -d '\015' <INPUT_FILE > OUTPUT_FILE
于 2015-06-30T08:56:31.263 回答
0

tr '\015' '\n' < /tmp/file-with-ctrlm.txt > /tmp/no-ctrlm.txt

  • 此命令使用 CtrlM 的 ASCII 代码,并将所有 CtrlM 替换为换行符。
  • 它避免了 Ctrl-V、Ctrl-M,并且也适用于 Mac。
于 2019-08-21T16:07:01.410 回答
0

对我来说,这是唯一可行的..不是unix2dos或任何东西......

sed -e 's/\x0D//g'

参考:

十六进制的 0a 是与打印字符相对的控制字符,称为换行符。

十六进制的 0d 称为回车。

于 2019-09-30T17:55:39.883 回答