Is there any sed like utility for cmd.exe?
我想使用Windows命令行(cmd.exe)以编程方式编辑文件内容。在*nix中,有用于此任务的SED。在Windows中是否有有用的等价物?
编辑:我正在寻找本机命令行解决方案。
今天PowerShell救了我。
对于
1 | get-content somefile.txt | where { $_ -match"expression"} |
对于
1 | get-content somefile.txt | %{$_ -replace"expression","replace"} |
有关更多详细信息,请参阅zain naboulsis博客条目。
- 塞格温工作,但是巨大的。
- Unxutils更苗条。
- gnuwin32是另一个工作的端口。
- 另一种选择是AT&T研究公司的Uwin系统。
- 来自明格的MSY是另一个选择。
- Linux的Windows子系统是一个最"本机"的选项,但默认情况下它不安装在Windows上;不过它有现成的
sed 、grep 等。 - https://github.com/mbuilov/sed-windows提供了最新的4.3和4.4版本,与列出的上层端口不同,这些版本支持
-z 选项。
如果您不想安装任何东西,并且您的系统不是Windows Server,那么您可以使用脚本语言(例如vbscript)。下面是一个毛头,从袖口刺伤它。你的命令行应该是
1 | cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt |
其中oldpat和newpat是Microsoft vbscript regex模式。显然,我只实现了替代命令,并假定了一些事情,但是您可以充实它,使其更智能,并了解更多的
1 2 3 4 5 6 7 8 9 10 11 | 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 |
unxutils为win32提供了sed,gnuwin32也提供了sed。
如果您不想安装任何内容(我假设您想将脚本添加到将在其他计算机上运行的某些解决方案/程序等中),可以尝试创建一个VBS脚本(例如,replace.vbs):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 |
你就这样运行它:
1 | cscript replace.vbs"C:\One.txt""Robert""Rob" |
这与"BillWeaver"提供的SED版本类似,但我认为这个版本在特殊字符(">)方面更友好。
顺便说一句,我没有写这封信,但我记不起是从哪里弄来的。
超级SED是增强版的SED。对于Windows,这是一个独立的.exe,用于从命令行运行。
1 | > (Get-content file.txt) | Foreach-Object {$_ -replace"^SourceRegexp$","DestinationString"} | Set-Content file.txt |
这是
1 | sed -i 's/^SourceRegexp$/DestinationString/g' file.txt |
试试看。它是一个查找和替换文本实用程序,可以在命令批处理程序中使用。
http://sourceforge.net/projects/fart-it/
你可以试试PowerShell。有get content和set content commandlets内置,您可以使用。
您可以安装cygwin(http://www.cygwin.com/)并从那里使用sed。
我使用CygWin。我遇到了很多人,他们不知道如果您将cygwin二进制文件放在您的路径上,您可以从windows命令shell中使用它们。你不必运行Cygwin的bash。
您还可以查看Microsoft提供的Windows Services for Unix(但仅限于专业版和以上版本的Windows)。
编辑或编辑
另外还有Windows Services for Unix,它附带了许多用于Windows的Unix工具。http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
更新12/7/12在Windows 2003 R2、Windows 7&Server 2008等中,上述内容作为附加组件替换为基于Unix的应用程序子系统(SUA)。但是你必须下载实用程序:http://www.microsoft.com/en-us/download/details.aspx?ID=2391
您可以查看GNU工具,它们提供(除其他外)基于Windows的服务。
Windows有一个名为
从-https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat下载
作者是@dbenham from stack overflow and dostips.com
另一个名为
从-https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat下载
作者是@aacini,来自stack overflow and dostips.com
据我所知,没有任何东西像塞德是捆绑在窗户。但是,SED可用于多种不同形式的Windows,包括作为Cygwin的一部分、如果需要完整的POSIX子系统,或作为win32本机可执行文件(如果只想在命令行上运行SED)。
SED for Windows(gnuwin32项目)
如果它需要Windows自带,那么我唯一能建议的就是使用Windows支持的脚本语言,而不使用诸如vbscript之类的附加组件。
Cygwin工作,但这些公用设施也可用。只需将它们放到您的驱动器上,将目录放到您的路径中,您就拥有了许多友好的Unix实用程序。比赛格温轻(尽管效果也很好)。
我需要一个适用于windows cmd.exe提示的SED工具。EricPement的SED端口只有一个dos.exe,这对我来说非常有用。
它有很好的记录。
这在Vista Ultimate上有效,不一定是专业版。
sed-f命令文件名.cmd file1>file2