Answers:
今天,powershell救了我。
因为grep
有:
get-content somefile.txt | where { $_ -match "expression"}
要么
select-string somefile.txt -pattern "expression"
并且sed
有:
get-content somefile.txt | %{$_ -replace "expression","replace"}
有关更多详细信息,请参见Zain Naboulsis博客条目。
sed
(及其同类)包含在几个Unix命令包中。
sed
,grep
等开箱即用,但。-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
如果您不想安装任何东西(我假设您要将脚本添加到将在其他计算机上运行的某些解决方案/程序/ etc中),则可以尝试创建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版本相似,但是我认为这在特殊('> </)字符方面更为友好。
顺便说一句,我没有写这个,但是我不记得我从哪里得到的。
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
这是行为
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
尝试fart.exe。这是一个可在命令批处理程序中使用的查找和替换文本实用程序。
您可以安装Cygwin(http://www.cygwin.com/)并从那里使用sed。
我用Cygwin。我遇到了很多人,他们并没有意识到,如果将Cygwin二进制文件放在PATH上,则可以在Windows Command Shell中使用它们。您不必运行Cygwin的Bash。
您可能还会研究Microsoft 提供的Unix Windows服务(但仅适用于Windows专业版和更高版本)。
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
有一个名为Windows的帮助程序批处理文件,repl.bat
它具有SED的大部分功能,但doesn't require any additional download
也可以安装。它是一个混合批处理文件,用于Jscript
实现功能以及swift
,并且doesn't suffer from the usual poison characters
用于批处理并轻松处理空行。
repl
从以下位置下载-https: //www.dropbox.com/s/qidqwztmetbvklt/repl.bat
作者是@dbenham,来自堆栈溢出和dostips.com
另一个名为的帮助程序批处理文件findrepl.bat
为Windows用户提供了很多功能,GREP
并且还基于Jscript
混合批处理文件并且同样如此。它具有repl.bat的优点
findrepl
从以下位置下载-https: //www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
作者是@aacini,来自堆栈溢出和dostips.com
据我所知,windows不会捆绑sed。但是,sed可用于Windows的几种不同形式,包括作为Cygwin的一部分(如果要使用完整的POSIX子系统),或者作为Win32本机可执行文件(如果要仅在命令行上运行sed)。
如果它必须是Windows的本机,那么我唯一可以建议的就是使用Windows所支持的脚本语言而无需附加组件,例如VBScript。
我需要一个适用于Windows cmd.exe提示符的sed工具。Eric Pement的sed端口到单个DOS .exe对我来说非常有效。
有充分的记录。