如何在使用Tectia将文件从窗口传输到unix时删除ctrl M字符?

时间:2012-09-20 07:39:18

标签: windows unix character newline

我想使用Tectia将文件从Windows传输到Unix。但问题是当这些文件被传输(Ascii或二进制模式)并使用VI打开时我们得到^ M个字符。我搜索了这个但是解决方案是在使用utilites传输文件时删除这些^ M个字符。是否有任何方式这些^ M字符不会出现在第一位。

10 个答案:

答案 0 :(得分:19)

我是如何在vi编辑器中删除它的:

  • :%s/之后,然后按 ctrl + V ,然后按 ctrl + M 。这将为您提供^M
  • 然后//g(看起来像:%s/^M)按 Enter 应该全部删除。
祝你好运!

答案 1 :(得分:10)

您可以安装并使用dos2unix。安装完成后运行:

>dos2unix yourfile.txt 

答案 2 :(得分:9)

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

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

如果您想将其替换为\n

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

答案 3 :(得分:4)

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

:%s/^V^M//g

获取remove Ctrl+M characters

的更多技巧

答案 4 :(得分:3)

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

fromdos <your-file>

答案 5 :(得分:1)

感谢所有人的帮助。我使用解决方法解决了这个问题。 Windows使用CR + LF(\ r \ n)作为行尾和&amp; Unix使用LF(\ n)作为行尾。我使用Windows文件并在代码本身中用LF(\ n)替换CR + LF(\ r \ n)而没有任何实用程序。这使文件兼容Unix系统,然后我使用SFTP传输文件,它在Unix上运行。

答案 6 :(得分:1)

:%s/^V^M//
  1. g根本不需要。

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

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

答案 7 :(得分:0)

尝试

tr -d '\015' <INPUT_FILE > OUTPUT_FILE

答案 8 :(得分:0)

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

  • 此命令使用CtrlM的ASCII代码并将所有CtrlM替换为换行符。
  • 它避免使用Ctrl-V,Ctrl-M,并且在Mac上也可以使用。

答案 9 :(得分:0)

对我来说,这是唯一可以工作的..不是unix2dos或其他任何东西...

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

参考:

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

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