我想使用Tectia将文件从Windows传输到Unix。但问题是当这些文件被传输(Ascii或二进制模式)并使用VI打开时我们得到^ M个字符。我搜索了这个但是解决方案是在使用utilites传输文件时删除这些^ M个字符。是否有任何方式这些^ M字符不会出现在第一位。
答案 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)
答案 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//
g
根本不需要。
%s
- 查找并替换您要替换的文字
^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
答案 9 :(得分:0)
对我来说,这是唯一可以工作的..不是unix2dos或其他任何东西...
sed -e's / \ x0D // g'
参考:
十六进制0a(与打印字符相对应的控制字符)称为换行符。
十六进制0d称为回车符。