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
用于不在输出文件末尾添加额外的尾随换行符。
目标是删除所有单个 "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
用于不在输出文件末尾添加额外的尾随换行符。