我在 Windows 上创建了一些 shell 脚本。 我想在他们身上运行
dos2unix
。
我读到
dos2unix
适用于 Linux。您可以使用Notepad++。
递归转换目录的说明如下:
\r\n
\n
通过Notepad++解决了。
转到:编辑 -> EOL 转换 -> Unix。
如果您安装了
perl
,您只需运行:
perl -i -p -e "s/\r//" <filename> [<filename2> ...]
在 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
中的缓冲解决方案我使用了grepWin:
\r\n
\n
\r\n
\n
如果以上方法不起作用 -
mvn clean install
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"
作为替换字符串,以仅删除换行符左侧的回车符(如果文件在其他位置也包含回车符,而在转换时不应删除回车符)行终止符。
通过在每个匹配通配符模式的文件上使用命令 FOR 到 CALL 批处理文件 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 /?
无论出于何种原因,搜索和替换正则表达式对我来说都不起作用,但是通过设置 Encoding --> UTF-8 并重新保存在 Notepad++ 中的单个文件(~/.bashrc)上解决了。可扩展性较差,但希望可以为快速转换节省一些麻烦。
我意识到这可能有点语境上的飞跃,但无论如何我都会分享我的想法,因为它对我的用例有所帮助......
如果文件位于 git 存储库中,您可以通过 .gitattributes 文件强制执行行结尾。请参阅:如何使 git 不更改某个特定文件的行结尾?
您在 Cygwin 上使用的是非常旧的 dos2unix 版本。 Cygwin 1.7 更改为 dos2unix 的新版本,与大约两年前大多数 Linux 发行版附带的版本相同。因此,请使用 Cygwin 的安装程序更新您的 dos2unix。检查您是否获得版本 6.0.3。
还有 dos2unix 的本机 Windows 端口可用(win32 和 win64)。 请参阅http://waterlan.home.xs4all.nl/dos2unix.html
问候,