在 C# 模块中,我想使用 Tectia 将文件从 Windows 传输到 Unix。但问题是当这些文件被传输(Ascii 或二进制模式)并使用 VI 编辑器打开时,我们会得到 ^M 字符。我对此进行了搜索,但解决方案是在使用实用程序传输文件后删除这些 ^M 字符。有什么方法可以使这些 ^M 字符不首先出现。在发送这些文件之前,是否有任何选项可以在代码中使用解决方法?
问问题
71495 次
10 回答
22
我如何能够在 vi 编辑器中删除它:
- 然后
:%s/
按 ctrl+V然后ctrl+ 。M这会给你^M
- 然后
//g
(看起来像:):%s/^M
按Enter应该全部删除。
祝你好运!
于 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
于 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//
g
根本不需要。%s
- 查找并替换您想要替换的文本^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 回答