2017-07-29 79 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} 
相關問題