C#-在使用Tectia将文件从windows传输到unix时,如何删除ctrl M字符?
在C#模块中,我希望使用Tectia将文件从Windows传输到Unix。但问题是,当这些文件被传输(Ascii或二进制模式)并使用VI编辑器打开时,我们会得到^M个字符。 我对此进行了搜索,但解决方案是在使用实用程序传输文件后删除这些^M字符。有没有办法使这些^M字符不会首先出现。 在发送这些文件之前,是否可以选择在代码中进行变通?您可以安装并使用。安装完成后,只需运行:C#-在使用Tectia将文件从windows传输到unix时,如何删除ctrl M字符?,c#,windows,unix,newline,C#,Windows,Unix,Newline,在C#模块中,我希望使用Tectia将文件从Windows传输到Unix。但问题是,当这些文件被传输(Ascii或二进制模式)并使用VI编辑器打开时,我们会得到^M个字符。 我对此进行了搜索,但解决方案是在使用实用程序传输文件后删除这些^M字符。有没有办法使这些^M字符不会首先出现。 在发送这些文件之前,是否可以选择在代码中进行变通?您可以安装并使用。安装完成后,只需运行: >dos2unix yourfile.txt 尝试在终端中执行以下操作(可能需要先安装): fromdos 谢谢
>dos2unix yourfile.txt
尝试在终端中执行以下操作(可能需要先安装):
fromdos
谢谢大家的帮助。我用变通方法解决了这个问题。
Windows使用CR+LF(\r\n)作为行尾,Unix使用LF(\n)作为行尾。我使用Windows文件并将CR+LF(\r\n)替换为LF(\n)代码本身没有任何实用程序。这使文件与Unix系统兼容,然后我使用SFTP传输文件,它在Unix上工作,没有^M个字符。在vi编辑器中删除Ctrl+M的另一个技巧:
:%s/^V^M//g
想知道更多的诀窍吗
g
根本不需要%s
-查找并替换要替换的文本^V^M
要替换为“应在双斜杠之后”如果不想替换为任何内容,请将其保留为空如何在vi编辑器中删除它:
:%s/^V^M//g
- 在
之后,按ctrl+V,然后按ctrl+M。这将为您提供:%s/
^M
- 然后,
(看起来像://g
)按Enter键应该会删除所有内容:%s/^M
tr -d '\015' <INPUT_FILE > OUTPUT_FILE
tr-d'\015'输出文件
如果您只需要删除^M
字符(而不是将其替换为\n
):
如果要将它们替换为\n
:
sed -i -e 's/\r//g' yourfile.txt
sed -i -e 's/\r/\n/g' yourfile.txt
tr'\015'\n'/tmp/no-ctrlm.txt
- 此命令使用CtrlM的ASCII代码,并用换行符替换所有CtrlM李>
- 它避免了Ctrl-V、Ctrl-M,也可以在Mac上使用
- 对我来说,这是唯一可行的办法。。不是unix2dos或其他什么
sed-e's/\x0D//g'
参考:
十六进制0a是一个控制字符,与打印字符相对,称为换行符
十六进制0d称为回车。您好……我知道dos2unix实用程序,但有没有办法使这些ctrl M字符不只是出现?Unix使用一个换行符(LF)作为换行符。Windows/DOS使用2个字符:回车符/换行符(CR/LF)。因此答案是否定的,您无法消除CR\LF(除非您将所有文本都写在一行中)。@RaviGoklani我不知道有一个windows工具可以进行此类转换,但由于您使用
vim
,您可能会感兴趣。这对我来说只适用于没有
的情况;i、 e.dos2unix yourfile.txt
这个>
只是提示符号;)实际上,在传输完成后,我不想在UNIX上运行任何操作..没有命令,没有实用程序等..只是我的文件应该从Windows传输到UNIX,而不带^M字符。因此,在发送文件之前,您需要确保将文件设置为UNIX文件格式。我相信是下线(行尾)造成的,任何合适的文本编辑器都会允许您更改行尾类型。这种逐键输入是绝对必要的,因为复制和粘贴不会起作用。如果您在windows中从终端使用vi,这根本不起作用,因为控制字符的工作方式不同。如果您能够安装dos2unix解决方案(我将其添加到docker dev环境中)tr-d'\015'输出文件,那么dos2unix解决方案是最简单的
sed -i -e 's/\r/\n/g' yourfile.txt