我想使用Windows命令行(cmd.exe)以编程方式编辑文件内容.在*nix中有这个任务的sed.在Windows中有没有有用的等价物?
编辑:我正在寻找本机命令行解决方案.
今天powershell救了我.
因为grep
有:
get-content somefile.txt | where { $_ -match "expression"}
而且sed
有:
select-string somefile.txt -pattern "expression"
有关更多详细信息,请参阅Zain Naboulsis博客文章.
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正则表达式模式.显然我只是实现了替换命令并假设了一些东西,但你可以充实它,使其变得更聪明,更了解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
UnxUtils为Win32提供sed,GNUWin32也是如此.
如果你不想安装任何东西(我假设你想将脚本添加到将在其他机器上运行的某个解决方案/程序/等),你可以尝试创建一个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版本,但我认为这个特殊('> )字符更友好.
顺便说一句,我没有写这个,但我不记得我从哪里得到它.
Super Sed是sed的增强版本.对于Windows,这是一个独立的.exe,用于从命令行运行.
试试fart.exe.它是一个可以在命令批处理程序中使用的查找和替换文本实用程序.
http://sourceforge.net/projects/fart-it/
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
这是行为
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
您可以安装Cygwin(http://www.cygwin.com/)并从那里使用sed.
你可以试试powershell.有获得内容和设置内容命令行开关建立,你可以使用.
我用Cygwin.我遇到很多人没有意识到,如果你把Cygwin二进制文件放在你的PATH上,你可以在Windows Command shell中使用它们.你不必运行Cygwin的Bash.
您也可以查看Microsoft提供的Windows Services for Unix(但仅限于Professional及以上版本的Windows).