Powershell: редактирование всех строк и возвратов каретки в файле CSV - PullRequest
1 голос
/ 24 июня 2019

Цель состоит в том, чтобы удалить все одиночные «переводы строк» ​​(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 Ответ

2 голосов
/ 24 июня 2019

Вы можете использовать оператор -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 используется, чтобы не добавлять дополнительный, завершающий символ новой строки в конце выходного файла.

...