Для этого вы можете использовать обработку CSV в PowerShell:
# Import the file as if it was a CSV separated by the pipe,
# and process each row
Import-Csv -LiteralPath 'c:\temp\input.txt' -Delimiter '|' |
ForEach-Object {
# Replace spaces in the campaignName column, by name
$_.CampaignName = $_.CampaignName -replace '\s'
# and output the changed row item, for export to file
$_
} | Export-Csv -LiteralPath 'c:\temp\output.txt' -Delimiter '|' -NoTypeInformation
Или обработка простого текста и регулярное выражение заменить:
Get-Content -LiteralPath 'c:\temp\input.txt' | ForEach-Object {
$_ -replace '\s(?=[^|]+$)'
} | Set-Content -LiteralPath 'c:\temp\output.txt' -Encoding ASCII
Там, где регулярное выражение выбирает «пробелы, в которых больше не будет каналов на линии впоследствии» (возможно, это неверное предположение).
Или вы можете использовать обычную обработку текста, выбирая, где находится последний символ канала:
Get-Content -LiteralPath 'c:\temp\input.txt' | foreach-object {
$afterLastPipe = $_.lastindexof('|')+1
$_.Substring(0, $afterLastPipe) + $_.Substring($afterLastPipe).Replace(' ', '')
} | Set-Content...
Опять же, может быть неверным предположение, что больше нет каналов, особенно если они могут быть внутри кавычек.