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

Ber*_*man 688 linux vim dos2unix editor file

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

pjz*_*pjz 1039

dos2unix是一个命令行实用程序,它将执行此操作,或者:%s/^M//g如果您使用Ctrl- v Ctrl- m输入^ M,或者您可以:set ff=unix和vim将为您执行此操作.

'fileformat'设置上的文档在这里,vim wiki有一个全面的页面结束转换.

或者,如果你来回移动文件很多,你可能不想转换它们,而是要做:set ff=dos,所以vim会知道它是一个DOS文件并使用DOS约定来进行行结束.

  • vi中的"set ff = unix"很简单,很棒 (181认同)
  • 如果你按答案说并且'使用ctrl-v ctrl-m输入^ M',则不是这样. (74认同)
  • 为'set ff = unix` +1.它现在在我的配置:) (61认同)
  • `:%s/^ M // g`应该是`:%s /\r // g`,因为`^ M`只是意味着"匹配大写"M"在行的开头". (54认同)
  • @ropata Windows上你想要的是[**ctrl-q**](http://stackoverflow.com/a/426910/1028230). (3认同)
  • dos2unix 可能是更好的解决方案,但前提是它存在于系统上。我认为我们不应该用它来引导答案。`set ff=unix` 似乎是最好的答案。 (3认同)
  • 我一定是遗漏了什么,因为 `set ff=unix` 什么也没做。也许它转换了文件,但所有的 `^M` 字符仍然存在。 (3认同)
  • **crtl-v**不好,在Windows上它将剪贴板内容粘贴到命令行.解决方案`:%s /\r // g`为我工作,欢呼@Bunyk (2认同)

Lud*_*rin 262

更改视图中的行结尾:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Run Code Online (Sandbox Code Playgroud)

这也可以用作保存操作(:w单独使用你在屏幕上看到的行结尾不会保存):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Run Code Online (Sandbox Code Playgroud)

您可以从命令行使用它:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你.对于像我这样的懒人,我试过vi +':wq ++ ff = unix'<filepath>. (4认同)
  • 这应该是最受欢迎的答案.`:w + ff = unix`比这里写的大多数其他内容好得多,而bash脚本是一个很好的奖励. (2认同)

小智 156

我通常使用

:%s/\r/\r/g
Run Code Online (Sandbox Code Playgroud)

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

  • 此解决方案为我添加了不需要的额外行,使文件中的行数增加了一倍.`:%s /\r // g`代替我. (15认同)
  • 这在跨平台上始终如一.这里最好的答案. (9认同)
  • 我以前从未遇到过`:set ff = unix`,但我今天打开的文件一定特别奇怪.Vim说它已经是`fileformat = unix`但所有的行结尾都是`^ M`.这个解决方案对我有用. (3认同)
  • @VictorZamanian 的 `:%s/\r//g` 是 *唯一* 通用解决方案 - 特别是对于包含 DOS 和 UNIX 风格换行符的异构混合的混合模式文件。规范的解决方案(例如,`:set ff=unix`、`:e ++ff=unix`)假设当前缓冲区的每一行都以相同的换行符样式结束。有时他们会这样做;有时他们不这样做。*提示悲伤的表情。* (3认同)
  • Victor,您的文件可能以\ r \ n结尾。\ r不是读为换行符,而是\ n。在我遇到的文件中是\ r,您必须添加换行符。 (2认同)

Syl*_*sne 86

我更喜欢使用以下命令:

:set fileformat=unix
Run Code Online (Sandbox Code Playgroud)

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

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

:help fileformat
Run Code Online (Sandbox Code Playgroud)

  • 这个命令在我的 Windows vim 上似乎没有做任何事情。我的视图中仍然有 `^M` 字符。 (2认同)
  • 将 `set fileformat=unix` 添加到我的 .vimrc 文件中有效。 (2认同)

mer*_*tio 19

:%s/\r+//g
Run Code Online (Sandbox Code Playgroud)

在Vim中,它会删除所有回车符,并只留下换行符.

  • 出于某种原因,上面的内容对我来说不适用于windows gvim.但当改为`:%s /\r // g`时,它就像一个魅力. (2认同)
  • @soltysh :%s/\r\+$//g (2认同)

小智 18

:set fileformat=unix 把dos转换成unix.

  • 这实际上为我解决了这个问题。我在搜索时找不到这些字符。 (2认同)

Ven*_*oju 9

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

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

dos2unix input.txt input.txt
Run Code Online (Sandbox Code Playgroud)

以上使用假定的美国键盘.使用-437选项可以使用英国键盘.

dos2unix -437 input.txt input.txt
Run Code Online (Sandbox Code Playgroud)


CBu*_*atu 9

直接在 Linux 控制台中运行:

vim file.txt +"set ff=unix" +wq
Run Code Online (Sandbox Code Playgroud)


小智 8

将文件目录从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;
Run Code Online (Sandbox Code Playgroud)

另外,如上所述,^ M = Ctrl+V+ Ctrl+M(不要只输入插入符"^"符号和M)


Mic*_*elD 7

tr -d '\15\32' < winfile.txt > unixfile.txt
Run Code Online (Sandbox Code Playgroud)

(见:http://kb.iu.edu/data/acux.html)


小智 6

我找到了一个非常简单的方法:用nano打开文件:nano file.txt

Ctrl+O保存,但在按 之前Enter,按:Alt+D在 DOS 和 Unix/Linux 行结束之间切换,或:Alt+M在 Mac 和 Unix/Linux 行结束之间切换,然后按Enter保存和Ctrl+X退出。

  • 这个问题是关于 vim 的,而不是 nano 的。 (2认同)

Dav*_*ebb 5

使用以下命令:

:%s/^M$//g 
Run Code Online (Sandbox Code Playgroud)

然后获取^M出现的类型. 告诉Vim从字面上输入下一个字符.CtrlVCtrlMCtrlV


aji*_*tix 5

以下步骤可以将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.
Run Code Online (Sandbox Code Playgroud)

参考:http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix


Dan*_*nid 5

关于让 ^M 出现的评论对我有用。仅仅在我的 vi 中输入“^M”一无所获(未找到)。该CTRL+ V CTRL+M序列做到了完美不过。

我的工作替换命令是

:%s/Ctrl-V Ctrl-M/\r/g
Run Code Online (Sandbox Code Playgroud)

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

:%s/^M/\r/g
Run Code Online (Sandbox Code Playgroud)


Vic*_* S. 5

在 VIM 中:

:e ++ff=dos | set ff=unix | w!
Run Code Online (Sandbox Code Playgroud)

在带有 VIM 的 shell 中:

vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
Run Code Online (Sandbox Code Playgroud)

e ++ff=dos- 强制以dos格式打开文件。

set ff=unix- 将文件转换为unix格式。