使用Powershell查找文件中的回车

时间:2016-01-26 21:37:16

标签: powershell

我希望在一组文件中看到包含Windows样式crlf而不是Unix样式lf的所有文件实例。这是我到目前为止所做的:

sls -Path src/*.cs -Pattern "`r`n" | group Path | select name

如果我搜索任何普通文本,但它没有找到回车符,这是有效的,即使(根据我在网上找到的所有内容),这是适当的Powershell转义序列,用于回车和换行。对于记录\r\n也不起作用。

1 个答案:

答案 0 :(得分:6)

slsSelect-String的别名)逐行工作,因此它在文件读取过程中已经处理(消耗)换行符,然后才能进行正则表达式匹配。

使用读取整个文件的内容,然后查找它:

Get-ChildItem -Path src/*.cs | ForEach-Object {
    $contents = [System.IO.File]::ReadAllText($_.FullName)
    if ($contents -cmatch '\r\n') {
        $_
    }
} | Group-Object Directory | Select-Object Name
这里使用的是

\r\n而不是反引号,因为你正在为正则表达式引擎转义它们,而不是for powershell。