it-swarm.cn

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

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

645
Bert Hekman

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

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

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

995
pjz

更改视图中的行结尾:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

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

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

您可以从命令行使用它:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
249
Ludvig A. Norin

我通常使用

:%s/\r/\r/g

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

153
t-dub

我更喜欢使用以下命令:

:set fileformat=unix

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

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

:help fileformat
75
Sylvain Defresne
:%s/\r+//g

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

19
mercutio

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

16
Martin Sjögren
13
Alex Gartrell

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

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

dos2unix input.txt input.txt

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

dos2unix -437 input.txt input.txt
9
Venkataramesh Kommoju

将文件目录从dos转换为Unix

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

@ https://Gist.github.com/sparkida/777317

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

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

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

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

6
MichaelD

使用以下命令:

:%s/^M$//g 

获取^M以显示类型 CtrlV 然后 CtrlM。 CtrlV 告诉Vim从字面上输入下一个字符。

5
Dave Webb

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

: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

5
ajitomatix

您可以使用:

vim somefile.txt +"%s/\r/\r/g" +wq

dos2unix utility

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

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

整体而言,此命令将所有\r替换为空,将其从行的末尾移除。

4
Rob Wells

关于让^ M出现的评论对我有用。仅仅在我的vi中键入“^ M”一无所获(未找到)。该 CTRL+VCTRL+M 虽然序列做得很好。

我的工作替换命令是

:%s/Ctrl-V Ctrl-M/\r/g

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

:%s/^M/\r/g
4
Dannid

我找到了一个非常简单的方法:用nano打开文件:nano file.txt

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

4
Stefan Sjöberg

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

3
JayG

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

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

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

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

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

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

BSD版本:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU版本:

dos2unix $FILENAME

或者,您可以在此处使用任何建议的答案创建自己的dos2unix,例如:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

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

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

1
CBuzatu

在vim中,键入:

:w !dos2unix %

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

1
Tallak Tveide

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

在您的Linux终端上,输入

dos2unix filename.ext

这将完成所需的魔法。

0
Santle Camilus

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

%s/\r\+$//g

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

0
loadaverage

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

autocmd BufWrite * :set ff=unix
0
Thomas PABST

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

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

或者写入stdout:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574