这个问题与另一个问题有关,该问题采用perl方式,但是由于Windows错误而发现了很多困难。 (请参阅Perl or Powershell how to convert from UCS-2 little endian to utf-8 or do inline oneliner search replace regex on UCS-2 file)
我希望在Little Endian UCS-2格式文件(UCS-2LE与UTF-16 Little Endian相同)上使用与简单perl regex等效的POWERSHELL。即:
perl -pi.bak -e 's/search/replace/g;' MyUCS-2LEfile.txt
您可能需要告诉Powershell gci输入文件为ucs2-le,并且您还希望输出文件为相同的UCS-2LE(Windows CR LF)格式,等等。
答案 0 :(得分:1)
这将在正则表达式后输出文件。输出文件不是以BOM表开头。这应该适用于小文件。对于大文件,可能需要快速进行更改。
$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:对于{string []]强制转换,https://gist.github.com/refactorsaurusrex/9aa6b72f3519dbc71f7d0497df00eeb1的@refactorsaurusrex
NB:位于https://gist.github.com/mklement0/acb868a9f15d9a34b6e88fc874b3851d的mklement0
注意:如果源文件是HTML,请参见https://stackoverflow.com/a/1732454/447901