На первый взгляд, вам не нужно использовать Import-Csv
для работы с текстовым файлом. Это зависит от задачи, которую вы выполняете, но использование Get-Content
в этом случае выглядит более подходящим, поскольку оно считывает файл как массив строк, а не как массив динамических объектов.
Кроме того, помните, что оператор -replace
использует регулярные выражения в качестве шаблона.
Вам нужно экранировать специальные символы и следовать синтаксису регулярных выражений.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
Мне удалось заменить эти специальные символы, используя их коды Unicode.
\ uXXXX, где XXXX - код в шестнадцатеричном формате.
https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
$importfile = 'C:\TEMP\ps_1\src.txt'
$Content = Get-Content $importfile
$Content | ForEach-Object {
foreach ($ch in $_.ToCharArray())
{
Write-Host "$($ch)[$([int]$ch)] " -NoNewline
}
Write-Host
Write-Host $_ -ForegroundColor Green
Write-Host ($_ -replace 'ü', 'ue') -ForegroundColor Yellow # works if script and src.txt are saved in the same encoding
Write-Host ($_ -replace "\u0413\u0458", 'ue') -ForegroundColor White # works if src.txt is in UTF8
Write-Host ($_ -replace "\u00FC", 'ue') -ForegroundColor Gray # works if src.txt is in UTF8 with BOM
}
UPD:
С учетом регистра заменить.
Файл src.txt имеет только одну строку:
--oöo--OÖO--uüu--UÜU--aäa--AÄA--bßb
$importfile = 'C:\TEMP\ps_1\src.txt'
$Content = Get-Content $importfile
$replacePairs = @{
"\u00FC" = 'ue'
"\u00DC" = 'Ue'
"\u00F6" = 'oe'
"\u00D6" = "Oe"
"\u00E4" = 'ae'
"\u00C4" = 'Ae'
"\u00DF" = 'ss'
}
$Content | ForEach-Object {
Write-Host $_ -ForegroundColor Green
$resultLine = $_
foreach($pair in $replacePairs.GetEnumerator())
{
Write-Host "`t$($pair.Key) $([char][Convert]::ToInt32(($pair.Key.Substring(4)), 16)) --> $($pair.Value)" -ForegroundColor Gray
$resultLine = $resultLine -creplace $pair.Key, $pair.Value
Write-Host $resultLine -ForegroundColor Gray
}
Write-Host $resultLine -ForegroundColor Yellow
}