Необходимо заменить \ x0d \ x0a на \ x2c \ x0d \ x0a в файле с помощью powershell - PullRequest
0 голосов
/ 24 октября 2018

Необходимо заменить \x0d\x0a на \x2c\x0d\x0a в файле.

Я могу сделать это относительно легко в Unix:

awk '(NR>1){gsub("\r$",",\r")}1' $file > "fixed_$file":

Нужна помощь в реализации этого в PowerShell.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Предполагая, что вы выполняете это на Windows (где по умолчанию используются символы новой строки \r\n (CRLF)), следующая команда эквивалентна вашей команде awk:

Get-Content $file | ForEach-Object { 
  if ($_.ReadCount -eq 1) { $_ } else { $_ -replace '$', ',' }
} | Set-Content "fixed_$file"

Предупреждение : кодировка символов входного файла не сохранена, а Set-Content использует значение по умолчанию, которое можно переопределить с помощью -Encoding.
In Windows PowerShell , по умолчанию используется системная кодировка "ANSI", тогда как в PowerShell Core она не соответствует спецификации UTF-8.

  • Get-Content $file читает входной файл построчно.

  • Цикл ForEach-Object пропускает 1-ю строку ($_.ReadCount -eq 1) как есть ($_) и добавляет , (что представляет собой escape-последовательность \x2c в вашей команде awk) для всех остальных ($_ -replace '$', ',').

    • Примечание: $_ + ',' или "$_," - более простые альтернативыдобавление запятой;оператор
      -replace на основе регулярных выражений использовался здесь для выделения функции PowerShell, аналогичной awk gsub().
  • Set-Contentзатем записывает полученные строки в целевой файл, заканчивая каждую последовательностью новой строки, соответствующей платформе, которая в Windows называется CRLF (\r\n).

...