有没有像西医喜欢的工具为cmd.exe

我想以编程方式使用Windows命令行( cmd.exe )编辑文件内容。 在* nix中有这个任务的sed 。 有没有什么有用的相当于Windows?

编辑:我正在寻找本地命令行解决scheme。

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

  • Cygwin的工作,但是是巨大的。
  • UnxUtils非常苗条。
  • GnuWin32是另一个工作的端口。
  • 另一种select是AT&T Research的UWIN系统 。
  • MinGw的MSYS是另一种select。
  • Windows Services for UNIX是最“本地”的选项,但它在Windows Server计算机上默认安装; 它有sedgrep等开箱即用。

如果你不想安装任何东西,而你的系统不是Windows服务器,那么你可以使用脚本语言(例如VBScript)。 下面是一个严重的,不合时宜的刺伤。 你的命令行看起来像

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

oldpat和newpat是Microsoft vbscript正则expression式模式 。 显然我只是实现了替代命令,并假设了一些东西,但是你可以充实一下,理解更多的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 

今天powershell救了我。

对于grep有:

 get-content somefile.txt | where { $_ -match "expression"} 

对于sed有:

 get-content somefile.txt | %{$_ -replace "expression","replace"} 

欲了解更多详情,请参阅Zain Naboulsis博客条目 。

UnxUtils为Win32提供了sed, GNUWin32也如此 。

如果你不想安装任何东西(我假设你想添加脚本到一些解决scheme/程序/等将在其他机器上运行),你可以尝试创build一个VBS脚本(可以说,replace.vbs):

 Const ForReading = 1 Const ForWriting = 2 strFileName = Wscript.Arguments(0) strOldText = Wscript.Arguments(1) strNewText = Wscript.Arguments(2) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strFileName, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, strOldText, strNewText) Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) objFile.Write strNewText objFile.Close 

你像这样运行它:

 cscript replace.vbs "C:\One.txt" "Robert" "Rob" 

这与“bill weaver”提供的sed版本类似,但我认为这个版本在特殊('> </)字符方面更友好。

顺便说一句,我没有写这个,但我不记得我从哪里得到它。

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

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

尝试fart.exe。 这是一个查找和replace文本工具,可以在命令批处理程序中使用。

http://sourceforge.net/projects/fart-it/

你可以试试powershell。 有可以使用的get-content和set-content命令行构build。

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

您也可以查看Microsoft提供的Windows服务(适用于Unix) (但仅限于Windows的Professional和更高版本)。

edlin或编辑

另外还有Windows Services for Unix,它提供了许多用于Windows的unix工具。 http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

2012年12月7日更新在Windows 2003 R2,Windows 7和Server 2008等中,上述内容被作为附件的基于UNIX的应用程序子系统(SUA)所取代。 但是你必须下载实用程序: http : //www.microsoft.com/en-us/download/details.aspx?id=2391

 > (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt 

这是行为

 sed -i 's/^SourceRegexp$/DestinationString/g' file.txt 

你可以看看GNU工具 ,他们提供(除其他外)sed在Windows上。

据我所知,sed和windows都没有捆绑在一起。 但是,sed可用于多种不同forms的Windows,包括作为Cygwin的一部分,如果您想要一个完整的POSIX子系统,或者如果您只想在命令行上运行sed,则可以作为Win32本机可执行文件。

Windows的Sed(GnuWin32项目)

如果它需要本机到Windows,那么我build议的唯一的其他事情就是使用Windows支持的脚本语言,而不使用附加组件(如VBScript)。

Cygwin的工作,但这些公用事业也可用。 只要把它们放在你的驱动器上,把目录放到你的path中,并且你有许多友好的Unix工具。 Cygwin的轻量级恕我直言(尽pipe那也工作得很好)。

Windows有一个帮助程序batch file,称为repl.bat ,它具有很多SEDfunction,但doesn't require any additional download或安装。 这是一个混合batch file,它使用Jscript来实现这些function,所以它很swift ,并且doesn't suffer from the usual poison characters批处理doesn't suffer from the usual poison characters ,并且很容易处理空行。

从 – https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat下载;repl

作者是来自堆栈溢出的@dbenham和dostips.com

另一个称为findrepl.bat帮助程序batch file为Windows用户提供了findrepl.bat的许多function,并且也基于Jscript ,同样也是一个混合batch file。 它分享repl.bat的好处

从 – https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat下载;findrepl

作者是堆栈溢出的@aacini和dostips.com

我需要一个适用于Windows cmd.exe提示符的sed工具。 Eric Pement的sed端口到单个DOS .exe对我来说非常好。

这是很好的文件 。

这对Vista终极,不知道临。

sed -f commandfilename.cmd file1> file2