在DOS中将DOS行结尾转换为Linux行结尾

Convert DOS line endings to Linux line endings in vim

如果我打开我在Windows中创建的文件,则所有行都以^M结尾。
如何一次删除这些字符?


dos2unix是一个命令行实用程序,它将执行此操作,或者:%s/^M//g将使用Ctrl-v Ctrl-m输入^ M,或者您可以:set ff=unix和vim将为您执行此操作。

'fileformat'设置上的文档在这里,vim wiki有一个全面的页面结束转换。

或者,如果你来回移动文件很多,你可能不想转换它们,而是做:set ff=dos,所以vim会知道它是一个DOS文件并使用DOS约定来进行行结束。


更改视图中的行结尾:

1
2
3
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

这也可以用作保存操作(:w单独使用你在屏幕上看到的行结尾不会保存):

1
2
3
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

您可以从命令行使用它:

1
2
3
4
for file in *.cpp
do
    vi +':w ++ff=unix' +':q'"$file"
done


我通常使用

1
2
3
:%s/
/
/g

这似乎有点奇怪,但因为vim与换行符的方式相同而起作用。我也发现它更容易记住:)


我更喜欢使用以下命令:

1
:set fileformat=unix

您还可以使用macdos将文件分别转换为macintosh或MS-DOS / MS-Windows文件约定。如果文件格式正确,则无效。

有关更多信息,请参阅vim帮助:

1
:help fileformat


1
2
:%s/
+//g

在Vim中,它会删除所有回车符,并只留下换行符。


:set fileformat=unix将dos转换为unix。


来自:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

[Esc]:%s / r $ $


dos2unix可以直接修改文件内容。

您可以直接在文件上使用它,而无需临时文件重定向。

1
dos2unix input.txt input.txt

以上使用假定的美国键盘。使用- 437选项可以使用英国键盘。

1
dos2unix -437 input.txt input.txt

将文件目录从dos转换为Unix

使用命令行和sed,找到当前目录中扩展名为".ext"的所有文件并删除所有"^ M"

@ https://gist.github.com/sparkida/7773170

1
find $(pwd) -type f -name"*.ext" | while read file; do sed -e 's/^M//g' -i"$file"; done;

另外,如上所述^ M = Ctrl + V + Ctrl + M(不要只输入插入符"^"符号和M)


1
tr -d '\15\32' < winfile.txt > unixfile.txt

(见:http://kb.iu.edu/data/acux.html)


以下步骤可以将dos的文件格式转换为unix:

1
2
3
:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

参考:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix


使用以下命令:

1
:%s/^M$//g

获取^M,然后输入CtrlV,然后输入CtrlMCtrlV告诉Vim从字面上输入下一个字符。


您可以使用:

1
2
3
vim somefile.txt +"%s/
/
/g" +wq

dos2unix utility


关于让^ M出现的评论对我有用。仅仅在我的vi中键入"^ M"一无所获(未找到)。 CTRL + V CTRL + M序列完美地完成了它。

我的工作替换命令是

1
2
:%s/Ctrl-V Ctrl-M/
/g

它在我的屏幕上看起来像这样:

1
2
:%s/^M/
/g


1
:g/Ctrl-v Ctrl-m/s///

CtrlM是字符
或回车符,DOS行结尾添加。 CtrlV告诉vim在命令行插入一个文字CtrlM字符。

总的来说,此命令将所有
替换为空,将其从行的末尾移除。


我发现了一种非常简单的方法:用nano:nano file.txt打开文件

CTRL + O保存,但在按Enter之前,按:ALT + D切换DOS和Unix / Linux行结束,或者:ALT + M切换到Mac和Unix / Linux行结束之后再按Enter保存和CTRL + X退出。


您可以使用以下命令:
:%s/^V^M//g
其中'^'表示使用CTRL键。


下面的命令用于重新格式化当前目录中的所有.sh文件,我在我的Fedora OS上测试过它。

1
2
for file in *.sh; do awk '{ sub("
$",""); print }'
$file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

直接运行到linux控制台:
vim file.txt +"set ff=unix" +wq


通常有一个dos2unix命令可用于此,只需确保您阅读手册,因为GNU和BSD版本在处理参数方面有所不同。

BSD版本:

1
2
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU版本:

1
dos2unix $FILENAME

或者,您可以在此创建自己的dos2unix,其中包含任何建议的答案,例如:

1
2
3
4
5
6
7
function dos2unix(){
    ["${!}" ] && [ -f"{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim"${1}";
}

在vim中,键入:

1
:w !dos2unix %

这会将当前缓冲区的内容传递给dos2unix命令,并将结果写入当前内容。 Vim会要求重新加载文件


我知道我在某个地方见过这个。这是FreeBSD登录提示:

需要从DOS文件中删除所有^ M个字符?尝试

1
2
3
tr -d \
 < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

我想用换行代替^ M'。 Perl救援:

1
2
perl -pi.bak -e 's/\x0d/
/g'
excel_created.txt

或者写入stdout:

1
2
perl -p -e 's/\x0d/
/g'
< excel_created.txt

这是我的方式。我在dos EOL中打开了一个文件,当我保存将自动转换为unix EOL的文件时

1
autocmd BufWrite * :set ff=unix


虽然这个主题已经很老了,但我还是想从wikia中添加另一个东西:

1
2
%s/
\+$//g

填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只有
将留在eol。


如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M.要删除它,

在您的Linux终端上,输入

dos2unix filename.ext

这将完成所需的魔法。