Как убрать сразу несколько элементов? - PullRequest
0 голосов
/ 18 декабря 2018

В настоящее время у меня есть список из более чем 25 000 имен серверов.Каждое имя имеет массу дополнительных вещей, добавленных к имени, которые я хочу удалить.Вот пример данных:

WindowsAuthServer @{htew804WIN}

Я хочу удалить «WindowsAutherServer @ {» и «WIN}» с каждого сервера, оставив только «htew804».В настоящее время у меня есть:

$remove1 = $file -remove "WindowsAutherServer @{",""
$final = $remove1 -remove "WIN}",""

Это работает, но я хотел бы сделать все это за один шаг, если это возможно.Можно ли это сделать?

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018

Или вот этот:

$str = "WindowsAuthServer @{htew804WIN}"
([regex]'@\{(\w+)WIN\}').Match($str).Groups[1].Value;
0 голосов
/ 18 декабря 2018

Подумайте, что вы хотите сохранить вместо этого.

"WindowsAuthServer @{htew804WIN}" | foreach { $x = $_ -match '\@\{(.+)WIN}' ; $Matches[1] }
0 голосов
/ 18 декабря 2018

Это легко сделать, используя методы String.Substring() и String.LastIndexOf():

$str = "WindowsAuthServer @{htew804WIN}"
$str.Substring(($open = $str.LastIndexOf('{') + 1), $str.LastIndexOf('}') - $open - 3)

Сначала мы используем String.LastIndexOf('{'), чтобы найти последнее вхождение{, затем (используя это в качестве смещения) рассчитайте длину до WIN}

0 голосов
/ 18 декабря 2018

Это RegEx может сделать это за один раз:

$str = "WindowsAuthServer @{htew804WIN}"
$str -replace '.*?{(.*?)WIN}','$1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...