我是一名 Windows 用户,希望在命令提示符中使用 grep 和 sed 等程序以及 ls、cut 等其他实用程序。我遇到了 2 个可以实现此目的的软件包
在选择它们之前,我想知道两者在功能方面以及更重要的是性能方面有什么区别。据我所知,GnuWin32 是 UnxUtils 的超集。这是正确的吗?
Barlop 的注释
这个问题问的是 coreutils 和 unxutils,但由于他谈论的是 grep 和 sed,很明显他想问的是 gnuwin32 和 unxutils,而这个问题比错误的问题更有用、更重要。如果人们想将其恢复为 coreutils 和 unxutils,那么我很乐意这样做,并发布另一个关于 gnuwin32 和 unxutils 的问题。此外,对他的原始问题的任何正确回答都会纠正或回答他的错误,同时也回答他的意思。所以纠正他的问题没有损失。
答案1
unxutils 包含许多最有用的实用程序的旧版本。例如包括 grep。
gnuwin32 版本也过时很多年了,尽管不像 unxutils 那么老。Gnuwin32 拥有更多的实用程序。这显然是一个很大的优势。
请记住,gnuwin32 比 unxutils 具有很大的优势。
举个例子..
极其古老的 unxutils
C:\unxutils>grep -V
grep (GNU grep) 2.4.2
Copyright 1988...
相当老的 gnuwin32
C:\blah>"c:\Program Files (x86)\GnuWin32\bin\grep.exe" -V
GNU grep 2.5.4
Copyright (C) 2009 ...
与比 gnuwin32 更新的软件(例如 cygwin)进行对比
$ grep --version
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
使用 unxutils 时,您可能会遇到问题,因为它使用的是非常旧的版本,并且当寻求帮助时,人们会期望您拥有这个或那个命令的最新版本。
unxutils 有一些较小的优势,这使得 unxutils 非常有用。
- unxutils 有 xxd,gnuwin32 没有。(注意,VIM 7 也有 xxd,cygwin 也有)
截至撰写本文时(2014 年),gnuwin32 的 tail -f 已损坏,unxutils 的 tail -f 较旧但可以工作。(提到这里 Cygwin 的 tail 也可以工作。有两次我遇到了 gnuwin32 grep 中的错误,这些错误已在 grep 的更高版本中修复,而 cygwin 的 grep 则更新得多,而且运行良好(并且可以直接从 cmd.exe 运行,而不必从 cygwin shell 运行)。
以下是一个较小的优势,但如果您很懒,或者只是想快速使用它,那么 unxutils 只是一个 zip,您可以提取可执行文件并开始使用。Gnuwin32 需要一个向导来安装各种位,甚至一些单独的实用程序必须单独安装,例如 wget 的安装可执行文件,grep 的安装可执行文件(grep-xxxx-bin.exe)。使用 unxutils 时,您只需从 zip 中的 wbin 目录中提取即可。请记住,虽然它们是旧版本,所以如果可能的话,如果不是太懒,通常会看看 gnuwin32 是否有它。
- unxutils 可以独立运行,而许多等效的 gnuwin32 二进制文件则不能。因此,如果您不想或无法安装 gnuwin32,那么您可以使用 unxutils 中的命令独立运行。例如,gnuwin32 的 tr.exe 需要其目录中有两个 dll 文件,否则它会说它们不存在并且不会运行。gnuwin32 的 sed 不能独立运行,而 unxutils tr.exe 和 sed.exe 可以独立运行。
- unxutils 有 gclip.exe 和 pclip.exe 它们是复制到剪贴板和从剪贴板粘贴的命令。gnuwin32 似乎没有类似的东西,而 windows 原生有 clip.exe(复制到剪贴板),但没有像 pclip 那样粘贴的命令。
unxutils sourceforge 链接中有 unxutils.zip 和 unxupdates.zip(后者是 unxutils.zip 的子集,但包含较新但仍然较旧的版本)。例如 unxutils 有 1998 年的 sed,而 unxupdates 有 2003 年的 sed。这可以提供帮助,例如 1998 年的 sed 没有 \d 或 \x 符号(例如 \d34 或 \x22 来指定引号(比转义引号更容易)。unxupdates 是 2003 年的,有。
截至撰写本文时,gnuwin32 sed 是 2009 年的。(Gnuwin32 仍然过时,因为甚至还有 2014 年的 grep 版本http://ftp.gnu.org/gnu/grep/ 但是 gnuwin32 比 unxutils 的更新程度要低得多(即使 unxutils 与“unxupdates”一起考虑)。
这 http://unxutils.sourceforge.net/站点的 unxutils.zip已关闭但可用https://archive.org/details/UnxUtils并正式 https://sourceforge.net/projects/unxutils/如果你要获取它,那么也下载 unxupdates
将 gnuwin32 与 unxutils 进行比较,通常会优先考虑 Gnuwin32,但要知道 unxutils 也有一些优势。Gnuwin32 几乎拥有 unxutils 的所有命令,此外还有更多命令。
此外,看看 Cygwin,它拥有大量的实用程序集合,比 gnuwin32 保持得更为最新(它们应该从 cygwin 的 bash shell 运行,这对我来说没问题),你通常不需要查看像 unxutils 这样古老的和未更新的东西,尽管它确实有 pclip 和 gclip。
除了 gnuwin32 和 unxutils 之外,还有 MinGW、cygwin 和 Windows SUA(截至撰写本文时,MS 仍在维护并且会保持最新状态)和 GOW(规模较小,尽管 GOW github 页面显示其上次更新时间为 2014 年)以及更小的,BusyBox(Android 版很有名,但 Windows 版也有,这里仍然很小). 对我来说,最令人印象深刻的两个功能是 gnuwin32 和 cygwin(cygwin 有 xxd 和可用的 tail -f。所以我不需要求助于 unxutils)使用 cygwin,程序应该从 cygwin shell 运行,但它是一个 linux shell,例如 bash shell,而 bash 和其他 linux shell 功能强大,因此不会有任何损失。还请记住,现在许多人使用 linux 虚拟机而不是 cygwin 或 gnuwin32,它们确实可以更新命令的正确版本,而不是可能较旧且在使用引号时行为不同的 windows 端口。
补充说明-coreutils 又名 gnu coreutils,是一组在 linux (..) 上运行的命令,毫无疑问,在带有 Herd 的 GNU OS(一种使用较少的 OS!)上运行,并且可能为其他 *nix OS 完成了一些不错的实现。GNU Coreutils 众所周知,使用极其广泛,非常有用且不断更新。另一方面,unxutils 是人们在 linux 或 unix 上使用的一些命令的非常古老的实现/移植(毫无疑问包括一些 coreutils 命令),为 windows 操作系统完成。这两者通常甚至不会在同一个句子中提及,它们出现在原始问题中的唯一原因是由于原始问题中的一些混淆。GnuWin32 确实有一个用于 Windows 的 coreutils 实现,称为 Gnuwin32 coreutils ,但如上所述,Gnuwin32 是旧的/未更新的,只是没有 unxutils 那么旧/未更新。
答案2
Unxutils 是 Windows 原生的,没有依赖项 - 但已经有一段时间没有更新了,并且是 coreutils 的一个子集。您需要一个 *nix 风格的环境来运行 coreutils,因此您需要在 cygwin 或类似环境中运行它们
答案3
GnuWin32 中的 Coreutils 已“删除”;请参阅http://gnuwin32.sourceforge.net/packages/coreutils.htm