在DOS中将DOS行结尾转换为Linux行结尾
如果我打开我在Windows中创建的文件,则所有行都以^M结尾。
如何一次删除这些字符?
26个解决方案
930 votes
dos2unix是一个命令行实用程序,它将执行此操作,或者:set ff=dos将使用Ctrl-v Ctrl-m输入^ M,或者您可以:set ff=unix和vim将为您执行此操作。
'fileformat'设置上的文档在这里,vim wiki有一个在线结束转换的综合页面。
或者,如果你来回移动文件很多,你可能不想转换它们,而是做:set ff=dos,所以vim会知道它是一个DOS文件,并使用DOS约定进行行结束。
pjz answered 2018-12-26T11:47:12Z
233 votes
更改视图中的行结尾:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
这也可以用作保存操作(:w单独使用您在屏幕上看到的线条不会保存):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
您可以从命令行使用它:
for file in $(ls *cpp)
do
vi +':w ++ff=unix' +':q' ${file}
done
Ludvig A. Norin answered 2018-12-26T11:47:41Z
150 votes
我通常使用
:%s/\r/\r/g
这看起来有点奇怪,但是因为vim匹配换行的方式而起作用。 我也发现它更容易记住:)
answered 2018-12-26T11:48:05Z
72 votes
我更喜欢使用以下命令:
:set fileformat=unix
您也可以使用mac或dos分别将您的文件转换为macintosh或MS-DOS / MS-Windows文件约定。 如果文件格式正确,则无效。
有关更多信息,请参阅vim帮助:
:help fileformat
Sylvain Defresne answered 2018-12-26T11:48:34Z
19 votes
:%s/\r+//g
在Vim中,它会删除所有回车符,并且只留下换行符。
mercutio answered 2018-12-26T11:48:54Z
16 votes
:set fileformat=unix从dos转换为unix。
answered 2018-12-26T11:49:14Z
13 votes
来自:[http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix]
[Esc]:%s / \ r $ $
Alex Gartrell answered 2018-12-26T11:49:39Z
9 votes
-可以直接修改文件内容。
您可以直接在文件上使用它,而无需临时文件重定向。
dos2unix input.txt input.txt
以上使用假定的美国键盘。 使用-437选项可以使用UK键盘。
dos2unix -437 input.txt input.txt
Venkataramesh Kommoju answered 2018-12-26T11:50:08Z
7 votes
将文件目录从dos转换为Unix
使用命令行和sed,找到扩展名为“.ext”的当前目录中的所有文件,并删除所有“^ M”
@ [https://gist.github.com/sparkida/7773170]
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
另外,如上所述^ M = Ctrl + V + Ctrl + M(不要只输入插入符“^”符号和M)
Sparkida answered 2018-12-26T11:50:41Z
6 votes
tr -d '\15\32' < winfile.txt > unixfile.txt
(见:[http://kb.iu.edu/data/acux.html)]
MichaelD answered 2018-12-26T11:51:01Z
5 votes
以下步骤可以将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]
ajitomatix answered 2018-12-26T11:51:26Z
5 votes
使用以下命令:
:%s/^M$//g
获取^M以显示类型CtrlV然后CtrlM。 CtrlV告诉Vim按字面输入下一个字符。
Dave Webb answered 2018-12-26T11:51:50Z
4 votes
我找到了一个非常简单的方法:使用nano打开文件:nano file.txt
按CTRL + O保存,但在按Enter键之前,按:ALT + D在DOS和Unix / Linux行结束之间切换,或者:ALT + M在Mac和Unix / Linux行结束之间切换,然后按Enter保存 和CTRL + X退出。
Stefan Sjöberg answered 2018-12-26T11:52:15Z
4 votes
:g/Ctrl-v Ctrl-m/s///
CtrlM是字符\r,或回车符,DOS行结尾添加。 CtrlV告诉vim在命令行插入一个文字CtrlM字符。
总的来说,这个命令用什么都替换所有\r,从行的末尾删除它们。
Rob Wells answered 2018-12-26T11:52:40Z
4 votes
您可以使用:
vim somefile.txt +"%s/\r/\r/g" +wq
或dos2unix utility。
Christy Wald answered 2018-12-26T11:53:04Z
4 votes
让^ M出现的评论对我有用。 仅仅在我的vi中键入“^ M”一无所获(未找到)。 CTRL + V CTRL + M序列完美地完成了它。
我的工作替代命令是
:%s/Ctrl-V Ctrl-M/\r/g
它在我的屏幕上看起来像这样:
:%s/^M/\r/g
Dannid answered 2018-12-26T11:53:33Z
3 votes
您可以使用以下命令:
:%s/^V^M//g
其中'^'表示使用CTRL键。
JayG answered 2018-12-26T11:54:01Z
2 votes
下面的命令用于重新格式化当前目录中的所有.sh文件,我在Fedora OS上测试了它。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
Maerlyn answered 2018-12-26T11:54:21Z
1 votes
通常有一个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}";
}
dsm answered 2018-12-26T11:54:55Z
1 votes
我知道我在某个地方见过这个。 这是FreeBSD登录提示:
需要从DOS文件中删除所有^ M个字符? 尝试
tr -d \\r < dosfile > newfile
-- Originally by Dru
Albaro Pereyra answered 2018-12-26T11:55:19Z
1 votes
在vim中,键入:
:w !dos2unix %
这会将当前缓冲区的内容传递给dos2unix命令,并将结果写入当前内容。 Vim会要求重新加载文件
Tallak Tveide answered 2018-12-26T11:55:44Z
1 votes
直接运行到linux控制台:vim file.txt +"set ff=unix" +wq
CBuzatu answered 2018-12-26T11:56:04Z
0 votes
虽然这个主题已经很老了,但我想从wikia中添加另一个东西:
%s/\r\+$//g
填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只需\n将留在eol。
loadaverage answered 2018-12-26T11:56:29Z
0 votes
这是我的方式。 我在dos EOL中打开了一个文件,当我保存将自动转换为unix EOL的文件时
autocmd BufWrite * :set ff=unix
Thomas PABST answered 2018-12-26T11:56:49Z
0 votes
如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M. 要删除它,
在您的Linux终端上,输入
dos2unix filename.ext
这将完成所需的魔力。
Dr. Santle Camilus answered 2018-12-26T11:57:22Z
0 votes
我想用换行代替^ M'。 Perl救援:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
或者写入stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
user3379574 answered 2018-12-26T11:57:46Z