有没有类似于Windows的dos2unix工具?

40

我有一些在Windows上创建的Shell脚本。我想在它们上运行dos2unix

我读到dos2unix适用于Linux
是否有办法在Windows上将我的文件转换为Unix换行符?


2
安装Cygwin在Windows上提供类Unix环境。它包括dos2unix。 - Jim Garrison
1
http://kb.iu.edu/data/acux.html - Paul
1
我通过提供绝对文件路径来解决了这个问题。 - Elvin
2
此问题似乎与已解决的问题无关。原作者没有指定正确的文件路径,导致了错误。 - devnull
3
@devnull:你是如何说这个问题不在话题范围内的?我的问题是“有没有类似 DOS2Unix 的东西可以用于 Windows?”没有人回答。使用 CYGWIN 运行 DOs2Unix 并不等同于“类似 DOS2Unix 的东西可以用于 Windows”。你的问题是否不在话题范围内,我不知道。但是你所提到的DOs2Unix工具,有没有类似Windows平台下的工具呢?这才是你真正的问题。使用CYGWIN运行DOs2Unix并不算是“类似DOS2Unix的东西可以用于Windows”。 - Elvin
显示剩余3条评论
11个回答

50

您可以使用 Notepad++

递归转换目录的步骤如下:

  1. 菜单: 搜索 -> 在文件中查找...
  2. 目录 = 要递归转换为Unix格式的目录。例如,C:\MyDir
  3. 查找内容 = \r\n
  4. 替换为 = \n
  5. 搜索模式 = 扩展
  6. 点击“在文件中替换”

OP 询问命令行实用程序,而不是 GUI 程序。如何在 shell 脚本中调用 Notepad++ 进行替换?即使在 Notepad++ 中,您只需要使用编辑 > EOL 转换。 - phuclv
7
原文:@phuclv - I don't see any restriction about the tool to use (CLI or GUI) in the original demand. Also, Notepad++ "Edit > EOL conversion" is a solution for only one file at a time whereas the "Find and replace" can be recursive: in a complex project, it is useful!翻译:我没有看到原始要求中对要使用的工具(CLI或GUI)的任何限制。此外,Notepad++的“编辑>EOL转换”只适用于一个文件,而“查找和替换”可以递归进行:在复杂项目中,这非常有用! - Teazane
1
我知道这是一个旧帖子,但这个解决方案非常慢(我需要转换33GB的文件)。我使用了dos2unix(https://sourceforge.net/projects/dos2unix/),速度快了约100倍。 - Michał Malus

17

我用Notepad++解决了这个问题。

步骤如下:进入编辑菜单 -> EOL转换 -> Unix。


这是迄今为止最简单、最好的答案。 - Equation Solver

8
如果您已经安装了perl,则可以直接运行以下命令:
perl -i -p -e "s/\r//" <filename> [<filename2> ...]

6

在PowerShell中,由于.NET平台提供了许多工具,因此有很多解决方案可供选择。

使用文件路径$file = 'path\to\file',我们可以使用以下方法:

[IO.File]::WriteAllText($file, $([IO.File]::ReadAllText($file) -replace "`r`n", "`n"))

或者

(Get-Content $file -Raw).Replace("`r`n","`n") | Set-Content $file -Force

您可以使用-replace "`r", ""替代原来的方法。

如果要对所有文件执行此操作,只需将文件列表传递给上述命令即可:

Get-ChildItem -File -Recurse | % { (Get-Content -Raw `
    -Path $_.Fullname).Replace ("`r`n", "`n") | Set-Content -Path $_.Fullname }

请看

对于较大文件,您可能需要使用使用powershell替换CRLF的缓冲解决方案


6

至少有两个资源可供使用:

  • SourceForge上的dos2unix,该项目似乎正在积极维护(截至2015年),并且为Windows提供了预编译版本,包括32位和64位。还包括unix2dos、mac2unix和unix2mac。
  • 来自GnuWin32的CygUtils,这是从Cygwin分支出来的杂项实用程序,其中包括dos2unix以及其他几个相关实用程序。该软件包已不再积极维护(最后更新于2008年)。

2
我使用了 grepWin 工具:
  • 在 grepWin 中打开包含文件的文件夹
  • 在 "搜索" 部分中
    • 选择 "正则表达式搜索"
    • 搜索 -> \r\n
    • 替换为 -> \n
  • 点击 "搜索" 确认哪些文件将被修改,然后点击 "替换"。

1

我知道这可能有点脱离上下文,但我还是想分享我的想法,因为它在我的使用情况中很有用...

如果要将文件存储在git仓库中,您可以通过.gitattributes文件强制设置其行结尾。请参见:如何使git不更改特定文件的行结尾?


1
  • 使用Notepad++打开文件
  • 按下Ctrl+F
  • 选择搜索模式为“正则表达式”
  • 搜索- > \r\n
  • 替换为- > \n
  • 在“替换”选项卡下点击“全部替换”

如果上述方法不起作用 - mvn clean install


1
搜索和替换正则表达式出了点问题,但是在Notepad++中通过设置编码为UTF-8并重新保存单个文件(~/.bashrc)解决了。虽然不太可扩展,但希望能够节省一些快速转换的麻烦。

0

在Windows上,任何好的文本编辑器都支持仅使用换行符作为行终止符保存文本文件。

要将文本文件从DOS/Windows自动转换为UNIX行结尾,可以使用批处理文件JREPL.BAT,该文件由Dave Benham编写,是一个批处理文件/JScript混合体,可在Windows XP上运行使用JScript进行正则表达式替换的操作。

例如,可以使用以下命令将单个文件从DOS/Windows转换为UNIX:

jrepl.bat "\r" "" /M /F "Name of File to Modify" /O -

在这种情况下,文件中的所有回车符都被删除以进行修改。当然,也可以使用"\r\n"作为搜索字符串,"\n"作为替换字符串,仅删除位于行尾的回车符,如果文件中还包含其他不应在行终止符转换时删除的回车符。

通过使用命令FOR调用批处理文件JREPL.BAT来将目录中的多个文件或整个目录树从DOS/Windows转换为UNIX文本文件,匹配通配符模式的每个文件都会被转换。

批处理文件示例,将当前目录中的所有*.sh文件从DOS/Windows转换为UNIX。

@for %%I in (*.sh) do @call "%~dp0jrepl.bat" "\r" "" /M /F "%%I" /O -

批处理文件JREPL.BAT必须存储在包含此命令行的批处理文件相同的目录中。

为了理解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • jrepl.bat /?
  • call /?
  • for /?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接