使用Powershell查找文件中的回车

使用Powershell查找文件中的回车,powershell,Powershell,我想在一组文件中查看包含Windows样式crlf而不是Unix样式lf的所有文件实例。以下是我目前掌握的情况: sls -Path src/*.cs -Pattern "`r`n" | group Path | select name 如果我搜索任何普通文本,它都可以工作,但是它没有找到回车符,即使(根据我在网上找到的所有信息)这是回车符和换行符的正确Powershell转义序列。对于记录,\r\n也不起作用。sls(选择字符串的别名)逐行工作,因此它在到达正则表达式匹配之前,已经在文件读取

我想在一组文件中查看包含Windows样式
crlf
而不是Unix样式
lf
的所有文件实例。以下是我目前掌握的情况:

sls -Path src/*.cs -Pattern "`r`n" | group Path | select name
如果我搜索任何普通文本,它都可以工作,但是它没有找到回车符,即使(根据我在网上找到的所有信息)这是回车符和换行符的正确Powershell转义序列。对于记录,
\r\n
也不起作用。

sls
(选择字符串的别名)逐行工作,因此它在到达正则表达式匹配之前,已经在文件读取过程中处理(使用)换行符

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

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
而不是反勾号,因为您是为正则表达式引擎而不是为powershell转义它们。

sls
(选择字符串的别名)逐行工作,因此它在到达正则表达式匹配之前,已经在文件读取过程中处理(使用)换行符

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

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
而不是反勾号,因为您是为正则表达式引擎而不是为powershell转义它们。

可能值得一提的是,PS v3及更高版本支持更简单的
Get Content$\ FullName-Raw
来进行类似
GCI src/*.cs |{(GC$\ FullName-Raw)-match'\r\n}|组目录|选择名称
@TheMadTechnician是的,这是一个很好的观点,我通常这样做,我只是在赶时间。请随意编辑!我对使用
“`r`n”
和类似
-replace
-match
@Matt这样的东西没有问题。我不是说它不起作用,我只是想保持正则表达式的一致性;当与regex测试人员一起工作或共享它们时,它会有所帮助,因为我想它更“便携”?如果可能的话,我更喜欢正则表达式的单引号,这样我就可以继续使用它们了。无论如何,我只是把代码标记的引号放在那里。可能值得一提的是,PS v3和更高版本支持更简单的
Get Content$\.FullName-Raw
,比如
GCI src/*.cs |{(GC$\.FullName-Raw)-match'\r\n'}Group Directory | Select Name
@TheMadTechnician这是一个很好的观点,我通常这样做,我只是赶时间。请随意编辑!我对使用
“`r`n”
和类似
-replace
-match
@Matt这样的东西没有问题。我不是说它不起作用,我只是想保持正则表达式的一致性;当与regex测试人员一起工作或共享它们时,它会有所帮助,因为我想它更“便携”?如果可能的话,我更喜欢正则表达式的单引号,这样我就可以继续使用它们了。我只是在那里为代码标记加了引号。