关于powershell:如何在压缩的文本文件中使用grep表示文本模式?

How can I grep for a text pattern in a zipped text file?

我们的每日Feed文件平均大小为2 GB。这些文件在每个月末归档为一个zip文件,并存储在网络共享中。有时,我需要在那些文件中搜索某些记录。为此,我将远程桌面连接到共享服务器,将文件解压缩到temp文件夹,运行grep(或PowerShell)搜索,然后删除temp文件夹。现在,由于我们的服务器磁盘空间不足,因此不再建议将它们全部解压缩到临时文件夹。在这些压缩文件上进行正则表达式搜索,对磁盘或网络资源的影响最小的有效方法是什么?


Linux上的

zgrep。如果您使用的是Windows,则可以下载GnuWin,其中包含Windows端口zgrep。


PowerShell社区扩展(PSCX)包括Read-ArchiveExpand-Archive cmdlet,但是(尚未?)不包括导航提供程序,它会使您想要的内容变得非常简单。也就是说,您可以使用
Read-ArchiveExpand-Archive。像这样未经测试的东西

1
2
3
Read-Archive -Path foo.zip -Format Zip | `
   Where-Object { $_.Name -like"*.txt" } | `
      Expand-Archive -PassThru | select-string"myRegex"

将使您无需提取整个档案即可进行搜索。


Powershell社区扩展(PSCX)中有一些与zip相关的Commandlet。我不认为他们会做您想做的(尽管我可能完全错了)。相反,我将使用.Net Zip库(DotNetZip),该库实际上允许您列出存档中文件的名称,然后仅提取所需文件。