如果我打开我在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 |
我通常使用
这似乎有点奇怪,但因为vim与换行符的方式相同而起作用。我也发现它更容易记住:)
我更喜欢使用以下命令:
您还可以使用mac或dos将文件分别转换为macintosh或MS-DOS / MS-Windows文件约定。如果文件格式正确,则无效。
有关更多信息,请参阅vim帮助:
在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
使用以下命令:
获取^M,然后输入CtrlV,然后输入CtrlM。 CtrlV告诉Vim从字面上输入下一个字符。
您可以使用:
1 2 3
| vim somefile.txt +"%s/
/
/g" +wq |
或dos2unix utility。
关于让^ M出现的评论对我有用。仅仅在我的vi中键入"^ M"一无所获(未找到)。 CTRL + V CTRL + M序列完美地完成了它。
我的工作替换命令是
它在我的屏幕上看起来像这样:
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版本:
或者,您可以在此创建自己的dos2unix,其中包含任何建议的答案,例如:
1 2 3 4 5 6 7
| function dos2unix(){
["${!}" ] && [ -f"{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim"${1}";
} |
在vim中,键入:
这会将当前缓冲区的内容传递给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中添加另一个东西:
填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只有
将留在eol。
如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M.要删除它,
在您的Linux终端上,输入
dos2unix filename.ext
这将完成所需的魔法。