Windows 上有类似 dos2unix 的东西吗?

问题描述 投票:0回答:11

我在 Windows 上创建了一些 shell 脚本。 我想在他们身上运行

dos2unix

我读到

dos2unix
适用于 Linux
有没有一种方法可以让我在 Windows 上工作时将文件转换为具有 Unix 换行符?

windows newline carriage-return linefeed dos2unix
11个回答
51
投票

您可以使用Notepad++

递归转换目录的说明如下:

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

18
投票

通过Notepad++解决了。

转到:编辑 -> EOL 转换 -> Unix。


8
投票

如果您安装了

perl
,您只需运行:

perl -i -p -e "s/\r//" <filename> [<filename2> ...]

6
投票

至少有两个资源:

    SourceForge
  • 上的 dos2unix,似乎得到了积极维护(截至 2015 年),并且有针对 Windows 的预编译版本(32 位和 64 位)。还包括 unix2dos、mac2unix 和 unix2mac。
  • 来自 GnuWin32
  • CygUtils,是从 Cygwin 派生的各种实用程序,其中包括 dos2unix 以及其他几个相关实用程序。该软件包没有得到积极维护(最后一次更新是在 2008 年)。

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 }

对于较大的文件,您可能需要使用 Replace CRLF using powershell

中的缓冲解决方案

2
投票

我使用了grepWin

  • 在 grepWin 中打开包含文件的文件夹
  • 在“搜索”部分
    • 选择“正则表达式搜索”
    • 搜索 ->
      \r\n
    • 替换为 ->
      \n
  • 点击“搜索”确认要触摸哪些文件,然后点击“替换”。

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

如果以上方法不起作用 -

mvn clean install


1
投票

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

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

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

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

在这种情况下,所有回车符都会从要修改的文件中删除。当然,也可以使用

"\r\n"
作为搜索字符串,使用
"\n"
作为替换字符串,以仅删除换行符左侧的回车符(如果文件在其他位置也包含回车符,而在转换时不应删除回车符)行终止符。

通过在每个匹配通配符模式的文件上使用命令 FORCALL 批处理文件 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 /?

1
投票

无论出于何种原因,搜索和替换正则表达式对我来说都不起作用,但是通过设置 Encoding --> UTF-8 并重新保存在 Notepad++ 中的单个文件(~/.bashrc)上解决了。可扩展性较差,但希望可以为快速转换节省一些麻烦。


1
投票

我意识到这可能有点语境上的飞跃,但无论如何我都会分享我的想法,因为它对我的用例有所帮助......

如果文件位于 git 存储库中,您可以通过 .gitattributes 文件强制执行行结尾。请参阅:如何使 git 不更改某个特定文件的行结尾?


0
投票

您在 Cygwin 上使用的是非常旧的 dos2unix 版本。 Cygwin 1.7 更改为 dos2unix 的新版本,与大约两年前大多数 Linux 发行版附带的版本相同。因此,请使用 Cygwin 的安装程序更新您的 dos2unix。检查您是否获得版本 6.0.3。

还有 dos2unix 的本机 Windows 端口可用(win32 和 win64)。 请参阅http://waterlan.home.xs4all.nl/dos2unix.html

问候,

© www.soinside.com 2019 - 2024. All rights reserved.