Convert DOS line endings to Linux line endings in vim
如果我打开我在Windows中创建的文件,则所有行都以
如何一次删除这些字符?
dos2unix是一个命令行实用程序,它将执行此操作,或者
'fileformat'设置上的文档在这里,vim wiki有一个全面的页面结束转换。
或者,如果你来回移动文件很多,你可能不想转换它们,而是做
更改视图中的行结尾:
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 |
您还可以使用
有关更多信息,请参阅vim帮助:
1 | :help fileformat |
1 2 | :%s/ +//g |
在Vim中,它会删除所有回车符,并只留下换行符。
来自:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:%s / r $ $
您可以直接在文件上使用它,而无需临时文件重定向。
1 | dos2unix input.txt input.txt |
以上使用假定的美国键盘。使用
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 |
获取
您可以使用:
1 2 3 | vim somefile.txt +"%s/ / /g" +wq |
或
关于让^ 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是字符
总的来说,此命令将所有
我发现了一种非常简单的方法:用nano:
按CTRL + O保存,但在按Enter之前,按:ALT + D切换DOS和Unix / Linux行结束,或者:ALT + M切换到Mac和Unix / Linux行结束之后再按Enter保存和CTRL + X退出。
您可以使用以下命令:
其中'^'表示使用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控制台:
通常有一个
BSD版本:
1 2 | dos2unix $FILENAME $FILENAME_OUT mv $FILENAME_OUT $FILENAME |
GNU版本:
1 | dos2unix $FILENAME |
或者,您可以在此创建自己的
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 |
填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只有
如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M.要删除它,
在您的Linux终端上,输入
dos2unix filename.ext
这将完成所需的魔法。