Powershell:在CSV文件中编辑所有换行符和回车符

时间:2019-06-24 11:22:00

标签: powershell carriage-return linefeed

目标是删除所有单个“换行”(LF),并将跟随回车(CR)的“换行”保留在csv文件中。

我得到了一个报告,该报告在一行中包含多个LF,但是我只想保留“ CR + LF”,因此每一行代表一个报告的对象。

我需要PowerShell中的解决方案,很遗憾,我对PowerShell脚本非常陌生。我尝试为此更改一些脚本,但无法正常工作。

首先,我将尝试删除文件中的所有LF,然后将所有剩余的CR替换为[CR][LF]。但是我没有实现第一步。

$original_file ='C:\Test\Server.csv'
$new_file = 'C:\Test\Server_changed.csv'
(Get-Content $original_file -Raw).Replace('´n',' ') | Set-Content $new_file -Force
(Get-Content $new_file -Raw).Replace('`r','`r`n') | Set-Content $new_file -Force

来源CSV

"Servername";"CPU","Memory";"Annotation";"OperatingSystem"[CR][LF]
"Server1";"4";"8";"very importand Server!![LF]
If reboot is needed:[LF]
1. Contact Me[LF]
2. Stop all running Services before shutting down the OS[LF]
";"Windows Server 2019";[CR][LF]

外观如何:

"Servername";"CPU","Memory";"Annotation";"OperatingSystem"[CR][LF]
"Server1";"4";"8";"very importand Server!! If reboot is needed: 1. Contact Me 2. Stop all running Services before shutting down the OS ";"Windows Server 2019";[CR][LF]

1 个答案:

答案 0 :(得分:2)

您可以多次使用-replace运算符来获得结果。

$original_file ='C:\Test\Server.csv'
$new_file = 'C:\Test\Server_changed.csv'

(Get-Content $original_file -Raw) -replace "(?<!\r)(\n)" -replace "\r(?!\n)","`r`n" |
    Set-Content $new_file -NoNewLine -Force

说明:

  • -replace是正则表达式替换运算符,而不是字符串类.Replace()。使用-replace是为了使我们可以访问正则表达式机制负向超前((?!))和负向超前((?<!))。在每个-replace操作中,第一组引号表示捕获要替换数据的正则表达式模式。第二组引号表示替换字符串。如果您不指定第二组引号,则捕获的数据将被删除。

  • -Raw开关在Get-Content中用于防止PowerShell以数组形式读取文件,这会将换行符添加到内存中的数据中。

  • -NoNewLine开关Set-Content用于在输出文件的末尾不添加其他尾随换行符。