C#-在使用Tectia将文件从windows传输到unix时,如何删除ctrl 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 谢谢

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

您可以安装并使用。安装完成后,只需运行:

>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
    
    • :%s/
      之后,按ctrl+V,然后按ctrl+M。这将为您提供
      ^M
    • 然后,
      //g
      (看起来像:
      :%s/^M
      )按Enter键应该会删除所有内容
    祝你好运

    试试看

    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