答案 0 :(得分:103)
今天,powershell救了我。
对于grep
,有:
get-content somefile.txt | where { $_ -match "expression"}
和sed
有:
get-content somefile.txt | %{$_ -replace "expression","replace"}
有关详细信息,请参阅Zain Naboulsis blog entry。
答案 1 :(得分:85)
sed
(及其同类)包含在几个Unix命令包中。
sed
,grep
等。如果您不想安装任何东西且系统不是Windows Server,那么您可以使用脚本语言(例如VBScript)。下面是一个粗略的,袖手旁观的刺。您的命令行看起来像
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
其中oldpat和newpat为-z
option。显然我只实现了替换命令并假设了一些东西,但你可以充实它,使其变得更聪明,更了解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
答案 2 :(得分:23)
答案 3 :(得分:17)
如果您不想安装任何东西(我假设您要将脚本添加到将在其他计算机上运行的某个解决方案/程序/等),您可以尝试创建一个vbs脚本(假设,替换。 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版本,但我认为这个特殊('&gt;&lt; /)字符更友好。
是的,我没有写这个,但我不记得我从哪里得到它。答案 4 :(得分:9)
有Super Sed sed的增强版本。对于Windows,这是一个独立的.exe,用于从命令行运行。
答案 5 :(得分:7)
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
这是
的行为sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
答案 6 :(得分:7)
尝试使用fart.exe。它是一个可以在命令批处理程序中使用的查找和替换文本实用程序。
答案 7 :(得分:6)
你可以安装Cygwin(http://www.cygwin.com/)并从那里使用sed。
答案 8 :(得分:6)
您可以尝试使用PowerShell。您可以使用get-content和set-content内置的命令行开关。
答案 9 :(得分:6)
我使用Cygwin。我遇到很多人没有意识到如果你把Cygwin二进制文件放在你的PATH上,你可以在Windows Command shell中使用它们。你不必运行Cygwin的Bash。
您也可以查看Microsoft提供的Windows Services for Unix(但仅适用于专业版及以上版本的Windows)。
答案 10 :(得分:4)
edlin或edit
此外还有适用于Windows的Windows服务,其中包含许多用于Windows的unix工具。 http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
12/7/12更新 在Windows 2003 R2中,Windows 7&amp; Server 2008等以上由基于UNIX的应用程序子系统(SUA)替换为附加组件。但是你必须下载实用程序: http://www.microsoft.com/en-us/download/details.aspx?id=2391
答案 11 :(得分:3)
你可以看看GNU Tools,他们提供(除其他事项外)sed on windows。
答案 12 :(得分:3)
有一个名为repl.bat
的Windows帮助程序批处理文件,它具有SED的许多功能,但doesn't require any additional download
或安装。它是一个混合批处理文件,使用Jscript
来实现这些功能,批处理的swift
和doesn't suffer from the usual poison characters
也是如此,并且可以轻松处理空行。
从 - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
下载repl
作者是来自堆栈溢出的@dbenham和dostips.com
另一个名为findrepl.bat
的帮助程序批处理文件为Windows用户提供了GREP
的大部分功能,并且也基于Jscript
,同样也是一个混合批处理文件。它分享了repl.bat
从 - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
下载findrepl
作者是来自堆栈溢出的@aacini和dostips.com
答案 13 :(得分:2)
据我所知,sed与windows捆绑在一起。但是,sed可以以多种不同的形式用于Windows,包括作为Cygwin的一部分,如果你想要一个完整的POSIX子系统,或者如果你想在命令行上运行sed作为Win32本机可执行文件。
Sed for Windows (GnuWin32 Project)
如果它需要是Windows原生的,那么我唯一可以建议的是使用Windows支持的脚本语言,而不使用附加组件,例如VBScript。
答案 14 :(得分:1)
Cygwin有效,但these实用程序也可用。只需将它们放在您的驱动器上,将目录放入您的路径中,您就拥有许多友好的unix实用程序。更轻量级的恕我直言,Cygwin(尽管它的效果也一样)。
答案 15 :(得分:0)
这适用于Vista Ultimate,不确定Pro。
sed -f commandfilename.cmd file1 > file2
答案 16 :(得分:0)
我需要一个适用于Windows cmd.exe提示符的sed工具。 Eric Pement's port of sed to a single DOS .exe对我很有用。
非常好documented。