在 vim 中将 DOS 行结尾转换为 Linux 行结尾
题
如果我打开在 Windows 中创建的文件,所有行都以 ^M
.
如何一次性删除这些字符?
其他提示
更改视图中的行结尾:
: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
我通常使用
:%s/\r/\r/g
这看起来有点奇怪,但是由于 vim 匹配换行符的方式而有效。我也发现这样更容易记住:)
我更喜欢使用以下命令:
:set fileformat=unix
您还可以使用 mac
或者 dos
分别将您的文件转换为 Macintosh 或 MS-DOS/MS-Windows 文件约定。如果文件的格式已经正确,它什么也不做。
有关详细信息,请参阅 vim 帮助:
:help fileformat
:%s/\r+//g
在 Vim 中,这会删除所有回车符,只留下换行符。
:set fileformat=unix
从 dos 转换到 unix。
从: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc] :%s/ $//
dos2unix
可以直接修改文件内容。
您可以直接在文件上使用它,无需临时文件重定向。
dos2unix input.txt input.txt
上面使用假定的美国键盘。使用 -
437 选项使用英国键盘。
dos2unix -437 input.txt input.txt
将文件目录从 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)
tr -d '\15\32' < winfile.txt > unixfile.txt
以下步骤可以将 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
使用以下命令:
:%s/^M$//g
获取 ^M
出现类型 控制键V 然后 控制键中号. 控制键V 告诉 Vim 按字面意思获取下一个输入的字符。
我发现了一个非常简单的方法:用nano打开文件: nano file.txt
按 控制键+氧 保存,但在按下之前 进入, , 按: 丙氨酸转氨酶+D 在 DOS 和 Unix/Linux 行结束之间切换,或者: 丙氨酸转氨酶+中号 在 Mac 和 Unix/Linux 行尾之间切换,然后按 进入 保存并 控制键+X 退出。
:g/Ctrl-v Ctrl-m/s///
控制键中号 是角色 \r
, ,或回车符,这是 DOS 行结尾添加的。 控制键V 告诉 vim 插入一个文字 控制键中号 命令行中的字符。
总的来说,这个命令取代了所有 \r
没有任何内容,将它们从行尾删除。
您可以使用:
vim somefile.txt +"%s/\r/\r/g" +wq
或者 dos2unix utility
.
关于让 ^M 出现的评论对我有用。仅在我的 vi 中输入“^M”没有任何结果(未找到)。这 控制键+V 控制键+中号 不过序列完美地做到了这一点。
我的工作替换命令是
:%s/Ctrl-V Ctrl-M/\r/g
它在我的屏幕上看起来像这样:
:%s/^M/\r/g
您可以使用以下命令:
:%s/^V^M//g
其中“^”表示使用 控制键 钥匙。
下面的命令用于重新格式化当前目录中的所有 .sh 文件,我在我的 Fedora 操作系统上测试了它。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
通常有一个 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}";
}
我知道我在某处见过这个。以下是 FreeBSD 登录提示:
需要从 DOS 文件中删除所有这些 ^M 字符吗?尝试
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
在 vim 中输入:
:w !dos2unix %
这会将当前缓冲区的内容通过管道传递给 dos2unix 命令,并将结果写入当前内容。Vim 会要求重新加载文件
直接运行linux控制台:vim file.txt +"set ff=unix" +wq
虽然这个话题已经很老了,但我想从 wikia 放一些东西:
%s/\r\+$//g
填充找到所有回车符(一个或多个代表)直到行尾并删除,所以只需 \n
将留在 eol。
这是我的方式。我在 dos EOL 中打开了一个文件,当我保存该文件时,该文件将自动转换为 unix EOL
autocmd BufWrite * :set ff=unix
如果你在Windows中的NotePad或NotePad ++中创建一个文件并将其带到Linux并通过vim打开它,你将在每行末尾看到^M。要删除这个,
在您的 Linux 终端上,输入
dos2unix 文件名.ext
这将发挥所需的魔力。
我想要换行符来代替 ^M。Perl 来拯救:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
或者写入标准输出:
perl -p -e 's/\x0d/\n/g' < excel_created.txt