如何测试文本文件的第一行是以\ r还是\ n?
终止我尝试了类似以下的各种演绎。我不确定导入powershell(文件的第一行)的字符串是否包含不可见的字符。我也尝试使用StreamReader方法读取该行无效。
$master = Get-Content $masterFilename | Select-Object -First 1
if ($master.Contains("\r|\n"))
{
write-host "you betcha, there's a carriage return or line feed"
}
谢谢。
答案 0 :(得分:3)
Get-Content
会根据这些字符将您的文件转换为sting数组。当您开始测试内容时,这些字符已被删除。如果您只是在寻找新行的存在(您的条件似乎并不关心它遇到的情况),那么测试从Get-Content
返回的行数就足够了。
If((Get-Content $masterFilename).Count -gt 1){"you betcha, there's a carriage return or line feed"}
我确定一旦你看到它,我会加入这个。我想你可能需要修改你的问题,使其更具体一些。
Get-Content
有一个-Raw
开关,用于保留新行分隔符,这些分隔符更接近您想要去的位置。我不确定字符串方法是否包含支持通配符。我知道它不支持正则表达式。
如果你只是对一行感到好奇,那么如上所述-Raw
将是开始的地方。请考虑以十六进制表示的以下文本文件。它只是单词hello后跟换行符。
68 65 6c 6c 6f 0d 0a
现在我将以一个字符串的形式读取该文本,并测试字符串的结尾是否有回车符和换行符。请注意,我没有使用反引号逃脱。我正在使用正则表达式特殊字符。 (它会以任何方式工作。只需注意一些事项。)
(Get-Content c:\temp\test.txt -Raw) -match "\r\n$"
True
请注意,写入文件的大多数PowerShell cmdlet都会留下尾随换行符。因此,无论你有多少行,上面的代码片段都适用于Set-Content
。