递归查找文件中的文本(PowerShell)
递归查找文件中的文本(PowerShell)
我想找到特定目录中包含某个字符串的所有文件。具体来说,我要找到回车符 (\\r),然后手动浏览文件并删除它的出现次数。我不希望PowerShell移除它们,因为我的目录结构中可能有一些需要它们的子目录。
admin 更改状态以发布 2023年5月21日
你可以使用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-Content
将文件不作为字符串数组而作为一个大字符串来读取。如下所示:
Get-ChildItem -recurse | ? {[regex]::Matches((Get-Content $_FullName -Raw), '[\r\n]+').Count -gt 0}
您的问题似乎可以简化为:我想在一个目录中找到包含回车符的所有文件。是否有任何原因,导致这些答案不足吗?
例如:
这将给出包含您的搜索模式的文件的位置:
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name