如果使用PowerShell在双引号之间的任何位置,如何删除CRLF?

时间:2013-10-02 01:31:35

标签: powershell

我的文字文件如下所示。

"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执行此操作。

2 个答案:

答案 0 :(得分:0)

此方法可避免检查\r\n是否在引号中。相反,它试图找到线路情况的“真实”结束并首先转换它们。然后它只是清除其余部分。

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

我认为这应该可以处理你投入的大部分内容,但如果你发现特殊情况,请告诉我。

编辑

以修复替换字符串

答案 1 :(得分:0)

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

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