如果我打开在Windows中创建的文件,则所有行都以^M
结尾
如何一次删除这些字符?
答案 0 :(得分:988)
dos2unix是一个命令行实用程序,可执行此操作,如果您使用 Ctrl - v Ctrl {} kbd> - m 输入^ M,或者你可以:%s/^M//g
和vim为你做。
'fileformat'设置上的文档是here,vim wiki有一个全面的page on line ending conversions。
或者,如果你来回移动文件很多,你可能不想转换它们,而是做:set ff=unix
,所以vim会知道它是一个DOS文件,并使用DOS约定来进行行结束。 / p>
答案 1 :(得分:249)
更改视图中的行结尾:
: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
答案 2 :(得分:153)
我通常使用
:%s/\r/\r/g
这似乎有点奇怪,但是因为vim匹配换行的方式而起作用。我也发现它更容易记住:)
答案 3 :(得分:77)
我更喜欢使用以下命令:
:set fileformat=unix
您还可以使用mac
或dos
将文件转换为macintosh或MS-DOS / MS-Windows文件约定。如果文件格式正确,则无效。
有关更多信息,请参阅vim帮助:
:help fileformat
答案 4 :(得分:19)
:%s/\r+//g
在Vim中,它会删除所有回车符,并只留下换行符。
答案 5 :(得分:16)
:set fileformat=unix
将dos转换为unix。
答案 6 :(得分:13)
来自:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:%s / \ r $ $
答案 7 :(得分:9)
dos2unix
可以直接修改文件内容。
您可以直接在文件上使用它,而无需临时文件重定向。
dos2unix input.txt input.txt
以上使用假设的美国键盘。使用-
437选项使用英国键盘。
dos2unix -437 input.txt input.txt
答案 8 :(得分:7)
@ 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)
答案 9 :(得分:6)
tr -d '\15\32' < winfile.txt > unixfile.txt
答案 10 :(得分:5)
使用以下命令:
:%s/^M$//g
让^M
显示类型 Ctrl V 然后 Ctrl M 。 Ctrl V 告诉Vim从字面上输入下一个字符。
答案 11 :(得分:5)
以下步骤可以将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
答案 12 :(得分:4)
:g/Ctrl-v Ctrl-m/s///
Ctrl M 是DOS行结尾添加的字符\r
或回车符。 Ctrl V 告诉vim在命令行中插入文字 Ctrl M 字符。
作为一个整体,此命令将所有\r
替换为空,将其从行的末尾删除。
答案 13 :(得分:4)
您可以使用:
vim somefile.txt +"%s/\r/\r/g" +wq
或dos2unix utility
。
答案 14 :(得分:4)
我找到了一种非常简单的方法:使用nano打开文件:nano file.txt
按 CTRL + O 进行保存,但在按 Enter 之前,请按: ALT + D 在DOS和Unix / Linux行结束之间切换,或者: ALT + M 在Mac和Unix / Linux行结束之间切换然后按< kbd>输入保存, CTRL + X 退出。
答案 15 :(得分:4)
关于让^ M出现的评论对我有用。仅仅在我的vi中键入“^ M”一无所获(未找到)。 CTRL + V CTRL + M 序列完美地完成了它。
我的工作替换命令是
:%s/Ctrl-V Ctrl-M/\r/g
在我的屏幕上看起来像这样:
:%s/^M/\r/g
答案 16 :(得分:3)
您可以使用以下命令:
:%s/^V^M//g
其中'^'表示使用 CTRL 键。
答案 17 :(得分:2)
下面的命令用于重新格式化当前目录中的所有.sh文件,我在Fedora OS上测试过它。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
答案 18 :(得分:1)
通常可以使用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}";
}
答案 19 :(得分:1)
我知道我在某个地方见过这个。这是FreeBSD登录提示:
需要从DOS文件中删除所有^ M个字符吗?尝试
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
答案 20 :(得分:1)
在vim中,输入:
:w !dos2unix %
这会将当前缓冲区的内容传递给dos2unix命令,并将结果写入当前内容。在
之后,Vim会要求重新加载文件答案 21 :(得分:1)
要直接运行到Linux控制台中:
vim file.txt +"set ff=unix" +wq
答案 22 :(得分:0)
虽然这个主题已经很老了,但我还是要从wikia中添加其他内容:
%s/\r\+$//g
填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只有\n
将留在eol。
答案 23 :(得分:0)
这是我的方式。我在dos EOL中打开了一个文件,当我保存将自动转换为unix EOL的文件时
autocmd BufWrite * :set ff=unix
答案 24 :(得分:0)
我想用换行代替^ M'。 Perl救援:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
或写入stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
答案 25 :(得分:0)
如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M.要删除它,
在您的Linux终端上,输入
dos2unix filename.ext
这将完成所需的魔法。
答案 26 :(得分:0)
在VIM中:
:e ++ff=dos | set ff=unix | w!
在具有VIM的外壳中:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e ++ff=dos
-强制以dos
格式打开文件。
set ff=unix
-将文件转换为unix
格式。