【发布时间】:2020-06-01 18:44:26
【问题描述】:
我使用的是 PS v5.1
通常,如果我想搜索包含字符串的文件,我会使用这种模式:
Get-ChildItem -recurse | Select-String "searchstring"
如果我要搜索的是行终止字符 (\r\n),这似乎不起作用。 Select-String 文档状态:
Select-String 基于文本行。默认情况下,Select-String 在每一行中查找第一个匹配项,并且对于每个匹配项,它会显示文件名、行号以及包含匹配项的行中的所有文本。
因此,sls 似乎“有帮助”删除了我的行终止字符。 我可以这样做:
gci *|get-content -raw|sls "\r\r\n" -list
但这根本不一样,因为它丢失了文件名。我知道我可以写一个更长的 foreach 结构,例如:
foreach ($f in (gci -recurse *)) {
if ($f.PSIsContainer) {
continue
}
$c = Get-Content -raw $f.FullName
if ($c.Length -ne 0) {
$i = $c.IndexOf("`r`r`n")
if ($i -gt 0) {
Write-Output $f.FullName
}
}
}
但这对于我想做的事情来说似乎相当冗长和复杂。
有没有更好的(比如简洁的单行)方法来进行这种类型的搜索?
【问题讨论】: