2013-10-02 47 views
0

我的文本文件看起來像這樣。如何在使用PowerShell的雙引號之間的任何位置刪除CRLF?

"MikeCRLF","","","Dell","DevelCRLFCRLFoper"CRLF 
"SuCRLFsan","","","Apple","ManagCRLFer"CRLF 

期望的結果:

"Mike","","","Dell","Developer"LF 
"Susan","","","Apple","Manager"LF 

我想這對PowerShell的:

"C:\Users\abc\Desktop\1.txt" 
(Get-Content $path -Raw).Replace("`r`n","`n") | Set-Content $path -Force 

當我這樣做,我沒有得到期望的結果。另外,最後還剩下一個CRLF。我也不想要那樣。

請告訴我如何使用PowerShell v3執行此操作。

回答

0

此方法避免檢查\r\n是否在引號中。相反,它試圖找到「真正的」行結束的情況,並首先轉換它們。然後它清除其餘的部分。

(Get-Content test.txt -Raw) -replace '([^,]")(\s*\r\n\s*)+("[^,])',"`$1`n`$3" -replace '\r\n','' 

我認爲這應該可以處理大部分的東西,但是如果您發現特殊情況,請告訴我。

編輯修復替換字符串

+0

請問這個「([^,]「) (\ s * \ r \ n \ s *)+(「[^,])」,「$ 1'n' $ 3」是什麼意思,那是什麼? –

+0

'([^,]「)'=尋找一個前面沒有逗號的引號 '(\ s * \ r \ n \ s *)+'=查找一個或多個CRLF字符串,可選填充空格 '(「[^,])'=查找一個沒有逗號後面的報價 '$ 1 \ n $ 3' =用您在第一組中找到的內容替換它,換行('\ n')你在第三組中找到了。您必須添加組才能保留引號內容。這可以替換爲前瞻/後視,但我不知道是否PowerShell可以處理這些,因爲我從來沒有使用它。 – Desidero

+0

對不起,我的評論格式不正確。我在換行之前做了兩個空間,但它仍然將所有內容組合成一條可怕的線條。我現在超出了5分鐘的編輯窗口,所以我無法更改它。 – Desidero

0

如果您使用的是PowerShell Community Extensions,您可以使用ConvertTo-UnixLineEnding命令如:

ConvertTo-UnixLineEnding C:\users\abc\desktop1.txt -dest desktop1-converted.txt -Enc ascii 
+0

問題是他在他的實際內容中間有換行符。他不能僅僅改變從\ r \ n到\ n的所有內容 – Desidero

+0

@Desidero:你說的沒錯,我在兩者之間有新的路線......所以只是簡單地試圖替換所有的路線\ r \ n與\ n不會幫助。 –

相關問題