是否有像cmd.exe的sed工具?

时间:2008-09-24 14:01:42

标签: windows sed cmd

我想使用Windows命令行(cmd.exe)以编程方式编辑文件内容。在* nix中,此任务有sed。在Windows中是否有任何有用的等价物?

编辑:我正在寻找原生命令行解决方案。

17 个答案:

答案 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命令包中。

如果您不想安装任何东西且系统不是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)

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

答案 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。它是一个可以在命令批处理程序中使用的查找和替换文本实用程序。

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

答案 7 :(得分:6)

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

答案 8 :(得分:6)

您可以尝试使用PowerShell。您可以使用get-contentset-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来实现这些功能,批处理的swiftdoesn'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