2017-07-29 66 views
1

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

回答

1

你的问题似乎归结为:我想找到包含回车的目录中的所有文件。有没有任何理由为什么这些answers不够?

例如:

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

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

我试图模式化“\ n”和 - 模式“\ r”但没有返回。出于某种原因 - 模式“\ t”返回的文件。 – user8056359

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} 
相关问题