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

这篇博客讨论了如何在Vim编辑器中将由DOS行尾(^M)标记的文件转换为Linux/Unix风格的行尾。提供了多种Vim命令和技巧,包括使用dos2unix命令,以及在Vim内部直接操作的方法。
摘要由CSDN通过智能技术生成

如果打开在Windows中创建的文件,则所有行均以^M结尾。
如何一次删除所有这些字符?


#1楼

tr -d '\15\32' < winfile.txt > unixfile.txt

(请参阅: http : //kb.iu.edu/data/acux.html


#2楼

关于使^ M出现的评论对我有用。 在我的vi中仅输入“ ^ M”什么都没有(找不到)。 CTRL + V CTRL + M顺序虽然完美。

我的工作替代命令是

:%s/Ctrl-V Ctrl-M/\r/g

在我的屏幕上看起来像这样:

:%s/^M/\r/g

#3楼

我通常使用

:%s/\r/\r/g

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


#4楼

通常有一个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}";
}

#5楼

dos2unix可以直接修改文件内容。

您可以直接在文件上使用它,而无需临时文件重定向。

dos2unix input.txt input.txt

上面使用了假定的美式键盘。 使用- 437选择使用英国键盘。

dos2unix -437 input.txt input.txt

#6楼

将文件目录从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)


#7楼

下面的命令用于重新格式化当前目录中的所有.sh文件,我在Fedora OS上对其进行了测试。

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

#8楼

尽管这个话题很老,但我想从Wikia中添加另外一些内容:

%s/\r\+$//g

该填充查找到行尾的所有回车符(一个和多个代表)并删除,因此\\n将停留在eol处。


#9楼

我发现了一种非常简单的方法:使用nano打开文件: nano file.txt

CTRL + O保存,但是在按Enter之前,按: ALT + D切换DOS和Unix / Linux线尾,或者: ALT + M切换Mac和Unix / Linux线尾,然后按Enter保存和CTRL + X退出。


#10楼

这是我的方式。 我在dos EOL中打开了一个文件,当我保存该文件时,该文件将自动转换为unix EOL

autocmd BufWrite * :set ff=unix

#11楼

您可以使用:

vim somefile.txt +"%s/\r/\r/g" +wq

dos2unix utility


#12楼

我想要换行符来代替^ M。 Perl解救:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

或写到标准输出:

perl -p -e 's/\x0d/\n/g' < excel_created.txt

#13楼

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

在Linux终端上,键入

dos2unix filename.ext

这将完成所需的魔术。


#14楼

我知道我在某个地方见过这个。 这是FreeBSD登录提示:

是否需要从DOS文件中删除所有那些^ M字符? 尝试

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

#15楼

在vim中,键入:

:w !dos2unix %

这会将当前缓冲区的内容通过管道传递给dos2unix命令,并将结果写入当前内容。 Vim将要求在重新加载文件后


#16楼

要直接运行到Linux控制台中: vim file.txt +"set ff=unix" +wq


#17楼

:%s/\r+//g

在Vim中,这会删除所有回车符,并且仅保留换行符。


#18楼

:g/Ctrl-v Ctrl-m/s///

Ctrl M是字符\\r或回车符,DOS行尾添加了该字符。 Ctrl V告诉vim在命令行中插入文字Ctrl M字符。

总体而言,此命令将所有\\r替换为空,将其从行尾删除。


#19楼

dos2unix是将执行此操作的命令行实用程序,如果使用Ctrl - v Ctrl - m输入^ M,则:%s/^M//g将执行此操作;或者,可以:set ff=unix并且vim会执行以下操作:您。

'fileformat'设置的文档在这里 ,并且vim Wiki上有关于行尾转换的完整页面

另外,如果您来回移动文件很多,您可能不想转换它们,而是执行:set ff=dos ,所以vim会知道它是一个DOS文件,并使用DOS约定作为行尾。


#20楼

您可以使用以下命令:
:%s/^V^M//g
其中的“ ^”表示使用CTRL键。


#21楼

使用以下命令:

:%s/^M$//g 

使^M出现,先按Ctrl V再按Ctrl M。 Ctrl V告诉Vim接受字面上输入的下一个字符。


#22楼

来自: http : //vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

[Esc]:%s / \\ r $ //


#23楼

我更喜欢使用以下命令:

:set fileformat=unix

您也可以使用macdos将文件分别转换为macintosh或MS-DOS / MS-Windows文件约定。 如果文件已经采用正确的格式,则不会执行任何操作。

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

:help fileformat

#24楼

:set fileformat=unix可以从dos转换为unix。


#25楼

以下步骤可以将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


#26楼

更改视图中的行尾:

: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值