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

Powershell: Editing all Line Feeds and Carriage Returns in a CSV file

目标是删除所有单个 "Line Feeds"(LF) 并在 csv 文件中保留跟随 Return(CR) 的 "Line Feeds"。

我收到一份报告,其中一行包含多个 LF,但我只想保留 "CR+LF",因此每一行代表一个报告的对象。

我需要 PowerShell 中的解决方案,不幸的是我对 PowerShell 脚本编写还很陌生。我试图为此工作更改此方面的一些脚本,但它不起作用。

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

$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]

您可以多次使用 -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 是正则表达式替换运算符,与字符串 class .Replace() 相对。使用 -replace 以便我们可以访问正则表达式机制负向前瞻 ((?!)) 和负向后视 ((?<!))。在每个 -replace 操作中,第一组引号代表用于捕获要替换的数据的正则表达式模式。第二组引号代表替换字符串。如果您不指定第二组引号,则捕获的数据将被删除。

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

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