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

时间:2017-07-29 08:49:14

标签: string powershell search recursion text

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

2 个答案:

答案 0 :(得分:4)

您的问题似乎归结为:我想查找包含回车符的目录中的所有文件。有没有理由说这些answers不合适?

例如:

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

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

答案 1 :(得分:0)

您可以使用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}