28

我在要在其上运行的 Windows 上创建了一些 shell 脚本dos2unix

但是正如我所读到的那样,它dos2unixLinux环境中工作,有没有一种方法可以在 Windows 中工作时将我的文件转换为 UNIX 格式?

我已经安装了 CYGWIN 但我遇到了一些问题

Administrator@SGH735082N ~
$ pwd
/home/Administrator

Administrator@SGH735082N ~
$ cd C:\CVS Code

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix BLPDB000
BLPDB000:
dos2Unix processing BLPDB000: No such file or directory

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix -h
dos2Unix: bad argument -h: unknown option

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix --help
dos2Unix version 0.1.3
  converts the line endings of text files from
  DOS style (0x0d 0x0a) to UNIX style (0x0a)

Usage: dos2Unix [OPTION...] [input file list...]

Main options (not all may apply)
  -A, --auto     Output format will be the opposite of the autodetected source
                 format
  -D, --u2d      Output will be in DOS format
  --unix2dos     Output will be in DOS format
  -U, --d2u      Output will be in UNIX format
  --dos2unix     Output will be in UNIX format
  --force        Ignore binary file detection
  --safe         Do not modify binary files

Help options
  -?, --help     Show this help message
  --usage        Display brief usage message
  --version      Display version information
  --license      Display licensing information

Other arguments
  [input file list...]       for each file listed, convert in place.
                             If none specified, then use stdin/stdout

Administrator@SGH735082N /cygdrive/c/CVS
$

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix  -oBLPDB000
dos2Unix: bad argument -oBLPDB000: unknown option

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix -k BLPDB000
dos2Unix: bad argument -k: unknown option

Administrator@SGH735082N /cygdrive/c/CVS
$ dos2Unix BLPDB000.txt
BLPDB000.txt:
dos2Unix processing BLPDB000.txt: No such file or directory

Administrator@SGH735082N /cygdrive/c/CVS
$ pwd
/cygdrive/c/CVS
4

11 回答 11

39

您可以使用记事本++

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

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

通过记事本++解决了它。

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

于 2019-07-19T14:57:38.687 回答
7

如果您已经perl安装,您可以简单地运行:

perl -i -p -e "s/\r//" <filename> [<filename2> ...]
于 2013-12-04T07:03:42.503 回答
6

至少有两个资源:

  • SourceForge 上的 dos2unix似乎得到了积极维护(截至 2015 年),并为 Windows 预编译了 32 位和 64 位版本。还包括 unix2dos、mac2unix 和 unix2mac。
  • 来自 GnuWin32 的 CygUtils是从 Cygwin 派生的杂项实用程序,其中包括 dos2unix 以及其他几个相关实用程序。这个包没有被积极维护(最后一次更新是在 2008 年)。
于 2015-08-13T22:21:22.217 回答
3

鉴于 .NET 平台中有很多工具,PowerShell 中有很多解决方案

有了文件路径,$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 中的缓冲解决方案

于 2019-09-04T15:46:17.017 回答
2

我使用了 grepWin

  • 在 grepWin 中打开包含文件的文件夹
  • 在“搜索”部分
    • 选择“正则表达式搜索”
    • 搜索 ->\r\n
    • 替换为 ->\n
  • 点击“搜索”以确认将触摸哪些文件,然后点击“替换”。
于 2018-05-08T23:09:39.697 回答
1

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

于 2021-04-16T20:51:47.953 回答
0

您在 Cygwin 上使用的是非常旧的 dos2unix 版本。大约两年前,Cygwin 1.7 更改为 dos2unix 的新版本,与大多数 Linux 发行版一起提供的版本相同。所以用 Cygwin 的安装程序更新你的 dos2unix。检查您是否获得了 6.0.3 版本。

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

问候,

于 2013-12-04T08:35:22.650 回答
0

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

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

单个文件可以从 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 /?
于 2019-07-08T14:14:02.227 回答
0

我意识到这可能是一个上下文飞跃,但无论如何我都会分享我的想法,因为它只是在我的用例中有所帮助......

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

于 2021-12-29T01:06:20.420 回答
0
  • 使用记事本++打开文件
  • 点击Ctrl+F
  • 选择搜索模式为“正则表达式”
  • 搜索 ->\r\n
  • 替换为 ->\n
  • 点击“替换标签”下的“全部替换”

如果以上不起作用 - mvn clean install

于 2021-03-19T07:21:52.583 回答