递归查找文件中的文本 (PowerShell)

Posted

技术标签:

【中文标题】递归查找文件中的文本 (PowerShell)【英文标题】:Recursively find text in files (PowerShell) 【发布时间】:2018-01-05 08:10:37 【问题描述】:

我想查找特定目录中包含特定字符串的所有文件。具体来说,我想找到回车符(\r),然后手动浏览文件并删除它的出现。我不希望 PowerShell 删除它们,因为在我的目录结构中可能有某些子目录需要它们。

【问题讨论】:

【参考方案1】:

您可以使用Select-String 在一组文件中查找模式,但这只会在每行文本中搜索模式。它不适用于您的情况,因为您想搜索行分隔符。

更简单的方法是使用Get-Content,它将文件转换为字符串数组,每行一个项目。因此,任何具有返回和换行的文件都将生成一个包含多个项目的数组。试试这样的:

Get-ChildItem -recurse | ? (Get-Content $_.FullName).count -gt 1

如果您的文件很大并且您想加快速度,请添加-TotalCount,如下所示:

Get-ChildItem -recurse | ? (Get-Content $_.FullName -TotalCount 2).count -gt 1

这只会找到返回和换行符在一起的位置,如果您想要它们可以单独出现的实例,那么您需要强制 Get-Conent 不将文件作为字符串数组读取,而是作为一个大字符串读取反而。像这样的:

Get-ChildItem -recurse | ? [regex]::Matches((Get-Content $_FullName -Raw), '[\r\n]+').Count -gt 0

【讨论】:

【参考方案2】:

您的问题似乎归结为:我想在包含回车的目录中查找所有文件。这些answers 不够用有什么原因吗?

例如:

这应该给出包含您的模式的文件的位置:

Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name

【讨论】:

我尝试了 -pattern "\n" 和 -pattern "\r" 但没有返回任何内容。出于某种原因 -pattern "\t" 返回了文件。 必须承认,我刚试过这个,它无法从 excel 文件中找到字符串.. 耻辱

以上是关于递归查找文件中的文本 (PowerShell)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Windows命令行环境查找和替换文件中的文本?

PowerShell - 查找和修改字符串中的多个文本

PowerShell5。查找/替换文本。 Switch和.NET框架或cmdlet和管道?哪个更快?哪个更容易阅读?

如何递归地查找具有文本模式的文件,不包括某些目录和文件[重复]

Python实现对文件夹内文本文件递归查找

Powershell 中非常大的 XML 文件