Эквивалент PowerShell для простого поиска в регулярных выражениях Perl замените один вкладыш, чтобы найти замену в файле Little Endian UCS-2LE или UTF-16 - PullRequest
0 голосов
/ 08 мая 2019

Этот вопрос связан с другим вопросом, который прошел путь perl, но столкнулся с большими трудностями из-за ошибок Windows.(см. Perl или Powershell о том, как преобразовать переменную с прямым порядком байтов в UCS-2 в utf-8 или выполнить поиск в строке oneliner вместо регулярного выражения в файле UCS-2 )

Я хотел бы получить эквивалент POWERSHELLпростое регулярное выражение perl для файла формата UCS-2 с прямым порядком байтов (UCS-2LE аналогично UTF-16 Little Endian).то есть:

perl -pi.bak -e 's/search/replace/g;' MyUCS-2LEfile.txt

Возможно, вам потребуется сообщить Powershell gci, что входной файл - это ucs2-le, и что вы хотите, чтобы выходной файл был в том же формате UCS-2LE (windows CR LF), и т. д.

1 Ответ

1 голос
/ 08 мая 2019

Это выведет файл после регулярного выражения.Выходной файл не начинается с спецификации.Это должно работать для небольших файлов.Для больших файлов могут потребоваться быстрые изменения.

$fin = 'C:/src/t/revbom-in.txt'
$fout = 'C:/src/t/revbom-out.txt'
if (Test-Path -Path $fout) { Remove-Item -Path $fout }

# Create a file for input
$UCS2LENoBomEncoding = New-Object System.Text.UnicodeEncoding $False, $False
[System.IO.File]::WriteAllLines($fin, "now is the time`r`nwhen was the time", $UCS2LENoBomEncoding)

# Read the file in, replace string, write file out
[System.IO.File]::ReadLines($fin, $UCS2LENoBomEncoding) |
    ForEach-Object {
        [System.IO.File]::AppendAllLines($fout, [string[]]($_ -replace 'the','a'), $UCS2LENoBomEncoding)
    }

HT: @refactorsaurusrex на https://gist.github.com/refactorsaurusrex/9aa6b72f3519dbc71f7d0497df00eeb1 для приведения [string []]

Примечание: mklement0 наhttps://gist.github.com/mklement0/acb868a9f15d9a34b6e88fc874b3851d

Примечание: если исходный файл HTML, см. https://stackoverflow.com/a/1732454/447901

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...