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

28 浏览
0 Comments

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

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

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

0
0 Comments

您的问题似乎可以简化为:我想在一个目录中找到包含回车符的所有文件。是否有任何原因,导致这些答案不足吗?

例如:

这将给出包含您的搜索模式的文件的位置:

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

0