Cmd.exe 有没有类似 sed 的实用程序?

我想使用 Windows 命令行(Cmd.exe)以编程方式编辑文件内容。在 * nix 中,这个任务有 Sed。窗口中是否有任何有用的本机等价物?

281616 次浏览

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

Edlin 或者 Edit

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

更新12/7/12 在 Windows2003R2、 Windows7和 Server2008等中,上述内容被基于 UNIX 应用程序的子系统(Subsystem for UNIX-based Applications,SUA)作为一个附加组件替代。但你必须下载工具: Http://www.microsoft.com/en-us/download/details.aspx?id=2391

你可以看看 GNU 工具,他们在窗户上提供(和其他东西一样) sed。

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

Cygwin 工作,但 这些实用程序也可用。只需将它们放在驱动器上,将目录放到路径中,就可以得到许多友好的 unix 实用程序。无意冒犯,轻量级的 Cygwin (尽管这个工作得一样好)。

据我所知,sed 这样的软件还没有与窗口绑定在一起的。然而,sed 可以以几种不同的形式在 Windows 上使用,包括作为 Cygwin 的一部分,如果你想要一个完整的 POSIX 子系统,或者作为一个 Win32本地可执行文件,如果你只想在命令行上运行 sed。

Windows 版本(GnuWin32项目)

如果它需要原生于 Windows,那么我唯一可以建议的另一件事情就是使用 Windows 支持的脚本语言,而不使用附加组件,比如 VBScript。

你可以试试 Powershell,里面有 得到满足集合内容集合内容命令,你可以使用它们。

我用 Cygwin。我遇到很多人没有意识到,如果您将 Cygwin 二进制文件放在 PATH 上,就可以在 Windows 命令外壳中使用它们。你不必经营 Cygwin 的狂欢。

您还可以查看微软提供的 用于 Unix 的 Windows 服务(但只能在专业版及以上版本的 Windows 上使用)。

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

如果你不想安装任何东西,并且你的系统不是 Windows 服务器的,那么你可以使用一个脚本语言(例如:。下面是一个恶心的,即兴的尝试。您的命令行看起来像

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

其中老帕特和新帕特是 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

有一个增强版本的 sed。对于 Windows 来说,这是独立的。Exe,用于从命令行运行。

如果您不想安装任何东西(我假设您想将该脚本添加到某个将在其他机器上运行的解决方案/程序/等) ,您可以尝试创建一个 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 版本,但我认为这个版本在特殊(’>

顺便说一下,这不是我写的,但我想不起来是从哪里得到的。

今天 Powershell 救了我。

grep有:

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

或者

select-string somefile.txt -pattern "expression"

sed有:

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

有关替换 PowerShell 函数的详细信息,请参阅 这篇微软的文章

可以试试 fart.exe,它是一个可以在命令批处理程序中使用的“查找并替换文本”实用程序。

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

我需要一个 sed 工具,它可以工作在 Windows cmd.exe 提示符下。

这是相当不错的 记录在案

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

这是... 的行为

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

有一个 Windows 的帮助器批处理文件称为 repl.bat,它具有 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

替代链接 -https://www.dostips.com/forum/viewtopic.php?f=3&t=6044

作者是@dbenham,来自 stack overflow 和 dostips.com

另一个名为 findrepl.bat的辅助批处理文件为 Windows 用户提供了 GREP的大部分功能,它也是基于 Jscript的,同样也是一个混合批处理文件。它分享了 rep.bat 的好处

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

作者是@aacini,来自 stack overflow 和 dostips.com