Как избежать и заменить '\' в PowerShell - PullRequest
0 голосов
/ 29 октября 2018

Мы хотели бы заменить \ на \\ в наших мастер-файлах, что может помешать загрузке в Redshift (после замены \\ может быть загружено без проблем, и оно будет загружено одним \, так же, как оригинальные данные клиента).

Я попытался заменить \ на \\ следующим образом, но получил ошибку регулярного выражения в PowerShell:

Param(
    [string]$TargetFileName
)

# replace words
$old='`\'
$new='`\`\'

# replace \ to \\ for Redshift upload
$file_contents=$(Get-Content "$TargetFileName") -replace $old,$new
$file_contents > $StrExpFile

Сообщение об ошибке:

+ $file_contents=$(Get-Content "$TargetFileName") -replace $old,$new
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (`\:String) []、RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression

Простое выполнение -replace '\','\\' тоже не сработало.

Мы хотели бы сохранить его под тем же именем, но размер файла может быть большим, поэтому, если у вас есть идеи получше, мы также будем очень признательны.

1 Ответ

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

-Replace использует регулярные выражения, а в RegEx \ является специальным символом (escape-символом), поэтому для экранирования одиночной косой черты необходимо использовать другую косую черту: \\. Обратите внимание, что это верно только для $old (текст, который вы хотите сопоставить), заменяющий текст $new не является регулярным выражением, поэтому здесь вам все еще просто нужно \\.

$old = '\\'
$new = '\\'
$file_contents = (Get-Content "$TargetFileName") -replace $old,$new

В качестве альтернативы вы можете использовать метод .replace(), который не использует регулярные выражения:

$old = '\'
$new = '\\'
$file_contents = (Get-Content "$TargetFileName").replace($old,$new)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...