替换文件中的 CRLF

Replace CRLF in file

我实际上正在尝试制作一个如下所示的 .txt 文件:

text1
text 2


text3
text4

像这样:

text1,text2
text3,text4

我尝试了很多东西,比如:

foreach($line in $file){
    $line=$line -replace'`r`n', ','
}

或者直接在文件中替换而不是字符串:

$file=Get-Content('testo.txt')
$file=$file -replace '`r`n',''

但没有任何效果。我从来没有能够取代 CRLF。 如果有人有想法或任何东西!

事实上我做过这样的事情:

$Writer = New-Object IO.StreamWriter "$($PWD.Path)$OutputFile"
$Writer.Write( [String]::Join(".", $data) )
$Writer.Close()
$data=get-content temp.txt
$data=$data -replace '[@]{2,}',"`r`n"
$data=$data -replace '[@]',","
$data=$data -replace '( ){1,},',"no data"
$data>>temp1.txt

它能正常工作,做我想做的事。它效率不高,但我希望它能快速运行。
有时间我会尝试所有的答案,然后再说行不行。
如果我发现更有效的方法,也许我会更改脚本的这一部分。
感谢大家!

我认为更简单的东西。这将取决于文本文件的大小,因为它必须全部读入内存。然而,这将适用于 "test" 数据和白色 space 的可变行。我将假设您的数据不包含逗号。

$file = (Get-Content "c:\temp\data.txt") -join "," -replace ",{2,}","`r`n"
Set-Content -Path "C:\temp\Newfile.txt" -Value $file

获取文件并将其转换为逗号分隔的字符串。将会发生的是您会看到一系列逗号组。使用您的测试数据

text1,text 2,,,text3,text4

我们使用正则表达式将 2 个或更多的连续逗号组替换为换行符。获得所需的输出。

text1,text 2
text3,text4