Замена escape-символов в Powershell - PullRequest
4 голосов
/ 14 февраля 2009

У меня есть строка, состоящая из

"some text \\computername.example.com\admin$".

Как мне сделать замену, чтобы мой конечный результат был просто "имя_компьютера"

Кажется, мои проблемы в том, что я не знаю, как избежать двух обратных слешей. Для простоты я бы предпочел не использовать regexp:)

РЕДАКТИРОВАТЬ: На самом деле похоже, что у stackoverflow есть проблемы с двойной обратной косой чертой, это должна быть двойная обратная косая черта, а не показанная единственная

Ответы [ 2 ]

5 голосов
/ 14 февраля 2009

Не думаю, что в этом случае вы избавитесь от регулярных выражений.

Я бы использовал этот шаблон:

'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'

, что дает вам

PS C:\> 'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'

Some text computername

или, если вы хотите указать только имя компьютера из строки:

'Some text \\computername\admin$' -replace '.*\\\\(\w+)\\(\w+)\$', '$1'

, который возвращает

PS C:\> 'Some text \\computername\admin$' -replace '.*\\\\(\w+)\\(\w+)\$', '$1'

computername
4 голосов
/ 17 февраля 2009

Во-первых, нет ничего плохого в представленном методе Regex. Однако, если вы против этого, проверьте это:

$test = "some text \\computername.example.com\admin$"
$test.Split('\')[2].Split('.')[0]

Очень упрощенное тестирование показывает, что разделение на моей машине незначительно быстрее, чем оно стоит:

12:35:24 |(19)|C:\ PS>Measure-Command {1..10000 | %{'some text \\computername.example.com\admin$'.Split('\')[2].Split('.')[0]}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 215
Ticks             : 12159984
TotalDays         : 1.40740555555556E-05
TotalHours        : 0.000337777333333333
TotalMinutes      : 0.02026664
TotalSeconds      : 1.2159984
TotalMilliseconds : 1215.9984



12:35:34 |(20)|C:\ PS>Measure-Command {1..10000 | %{'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 335
Ticks             : 23351277
TotalDays         : 2.70269409722222E-05
TotalHours        : 0.000648646583333333
TotalMinutes      : 0.038918795
TotalSeconds      : 2.3351277
TotalMilliseconds : 2335.1277
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...