2016-02-12 143 views
1

如何測試文本文件的第一行是否以\ r或\ n結尾?Powershell:如何測試一行文本是否包含換行或回車?

我嘗試了類似於以下的各種再現。我不確定導入到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" 
    } 

謝謝。

+5

在Powershell換行符和回車符都是'\'n'和'''r'。 –

回答

2

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提到將開始的地方只是好奇一條線即可。考慮以十六進制表示的以下文本文件。這只是你好,然後換一個換行符。

68 65 6c 6c 6f 0d 0a 

現在我將讀取該文本作爲一個字符串,並測試字符串的末尾是否有回車符和換行符。請注意,我不會用反引號逃脫。我正在使用正則表達式特殊字符。 (它的工作無論哪種方式,只是要注意的。)

(Get-Content c:\temp\test.txt -Raw) -match "\r\n$" 
True 

注意,大多數寫入文件留下拖換行符PowerShell命令的。因此,無論上面的代碼片段有多少行都適用於Set-Content之類的內容。

+0

如果文件中只有一行以回車或換行結束,會發生什麼情況? – DanL

+1

@DanL請參閱更新 – Matt

+0

感謝您的額外編輯。您的最後一個片段是我的解決方案!我明白,馬特。 – STWilson

相關問題