目标是删除所有单个“换行”(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]
答案 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
用于在输出文件的末尾不添加其他尾随换行符。