cmd.exe是否有像sed这样的实用工具?

时间:2020-03-06 14:39:49  来源:igfitidea点击:

我想使用Windows命令行(cmd.exe)以编程方式编辑文件内容。在* nix中,有sed用于执行此任务。 Windows中是否有任何有用的等效项?

编辑:我正在寻找本机命令行解决方案。

解决方案

我们可以安装Cygwin(http://www.cygwin.com/)并从那里使用sed。

edlin或者编辑

另外还有适用于Unix的Windows服务,其中包含许多用于Windows的Unix工具。
http://technet.microsoft.com/zh-cn/interopmigration/bb380242.aspx

更新12/7/12
在Windows 2003 R2,Windows 7和Server 2008等中,以上内容已被基于UNIX的应用程序子系统(SUA)替代。但是我们必须下载实用程序:
http://www.microsoft.com/zh-cn/download/details.aspx?id=2391

我们可以看一下GNU工具,它们提供了Windows上的sed(以及其他功能)。

UnxUtils和GNUWin32一样为Win32提供sed。

Cygwin可以工作,但是也可以使用这些实用程序。只需将它们放到驱动器上,将目录放入路径中,就可以使用许多友好的Unix实用程序。轻巧的恕我直言,Cygwin(尽管效果也不错)。

据我所知,Windows没有捆绑sed。但是,sed可以以几种不同的形式用于Windows,包括Cygwin的一部分(如果要使用完整的POSIX子系统),或者Win32本机可执行文件(如果要仅在命令行上运行sed)。

适用于Windows的Sed(GnuWin32项目)

如果它必须是Windows的本机,那么我唯一可以建议的就是使用Windows所支持的脚本语言而无需添加组件,例如VBScript。

我们可以尝试使用powershell。我们可以使用其中的get-content和set-content Commandlet构建。

我用Cygwin。我遇到了很多人,他们并没有意识到,如果将Cygwin二进制文件放在PATH上,则可以在Windows Command Shell中使用它们。我们不必运行Cygwin的Bash。

我们可能还会研究Microsoft提供的Unix Windows服务(但仅适用于Windows专业版和更高版本)。

sed(及其同类)包含在几个Unix命令包中。

  • Cygwin可以工作,但是非常庞大。
  • UnxUtils更苗条。
  • GnuWin32是另一个有效的端口。
  • 另一种选择是AT&T Research的UWIN系统。
  • MinGw的MSYS是另一个选择。
  • Linux的Windows子系统是最"本机"的选项,但默认情况下未安装在Windows上。不过,它开箱即用了sed,grep等。
  • https://github.com/mbuilov/sed-windows提供了最新的4.3和4.4版本,与上面列出的端口不同,它们支持-z选项。

如果我们不想安装任何东西,而系统不是Windows Server,则可以使用脚本语言(例如VBScript)。下面是一个粗暴的现成的刺伤。命令行看起来像

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt

其中oldpat和newpat是Microsoft vbscript regex模式。显然,我只实现了替代命令并进行了一些假设,但是我们可以充实它,使其变得更聪明,并更多地了解sed命令行。

Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
  inp = WScript.StdIn.ReadLine()
  WScript.Echo rxp.Replace(inp, patparts(2))
Loop

此功能适用于Vista Ultimate(不确定Pro)。

sed -f commandfilename.cmd file1> file2

Super Sed是sed的增强版本。对于Windows,这是一个独立的.exe,旨在从命令行运行。