在DOS中将DOS行结尾转换为Linux行结尾

在DOS中将DOS行结尾转换为Linux行结尾

Convert DOS line endings to Linux line endings in vim

如果我打开我在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

我通常使用

1
2
3
:%s/
/
/g

这似乎有点奇怪,但因为vim与换行符的方式相同而起作用。我也发现它更容易记住:)


我更喜欢使用以下命令:

1
:set fileformat=unix

您还可以使用macdos将文件分别转换为macintosh或MS-DOS / MS-Windows文件约定。如果文件格式正确,则无效。

有关更多信息,请参阅vim帮助:

1
:help fileformat


1
2
:%s/
+//g

在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


使用以下命令:

1
:%s/^M$//g

获取^M,然后输入CtrlV,然后输入CtrlMCtrlV告诉Vim从字面上输入下一个字符。


您可以使用:

1
2
3
vim somefile.txt +"%s/
/
/g" +wq

dos2unix utility


关于让^ 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是字符
或回车符,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版本:

1
dos2unix $FILENAME

或者,您可以在此创建自己的dos2unix,其中包含任何建议的答案,例如:

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

填充找到所有回车标志(一个或多个代表)直到行尾并删除,所以只有
将留在eol。


如果您在Windows中的NotePad或NotePad ++中创建文件并将其带到Linux并通过vim打开它,您将在每行的末尾看到^ M.要删除它,

在您的Linux终端上,输入

dos2unix filename.ext

这将完成所需的魔法。


推荐阅读

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux命令删除用户组?

    linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    纯命令行linux服务器?

    纯命令行linux服务器?,密码,服务,系统,命令,终端,地址,百度,情况,状态,公共,

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux设置命令行长度?

    linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,l

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    linux命令行和关机?

    linux命令行和关机?,系统,工作,标准,状态,命令,管理,设备,时间,信息,目录,lin

    下载文件的命令linux?

    下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

    linux命令文件传输?

    linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

    linux执行多次命令?

    linux执行多次命令?,系统,信息,标准,工作,情况,命令,周期性,服务,代码,时间,l

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux中同步命令行?

    linux中同步命令行?,时间,系统,服务,图片,统一,中国,信息,命令,界面,硬件,LIN

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linuxvim命令行?

    linuxvim命令行?,系统,代码,模式,入口,基础,环境,命令,文件,编辑,文本,Linux

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux命令行退出系统?

    linux命令行退出系统?,系统,工作,时间,地址,信息,命令,软件,工具,发行,电脑,

    linux设备加载命令行?

    linux设备加载命令行?,设备,系统,信息,数字,首页,软件,密码,终端,文件,键盘,L