如何一次删除多个项目?

时间:2018-12-18 14:07:39

标签: powershell formatting

我目前有25,000多个服务器名称的列表。每个名称都有大量的其他名称,我想删除这些名称。这是一个示例数据:

WindowsAuthServer @{htew804WIN}

我想从每个服务器中删除“ WindowsAutherServer @ {”和“ WIN}”,只剩下“ htew804”。我目前有:

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

这可行,但是如果可能的话,我想一步来做。能做到吗?

4 个答案:

答案 0 :(得分:2)

RegEx可以一次完成:

$str = "WindowsAuthServer @{htew804WIN}"
$str -replace '.*?{(.*?)WIN}','$1'

答案 1 :(得分:1)

考虑要保留什么。

"WindowsAuthServer @{htew804WIN}" | foreach { $x = $_ -match '\@\{(.+)WIN}' ; $Matches[1] }

答案 2 :(得分:0)

可以使用String.Substring()String.LastIndexOf()方法轻松完成此操作:

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

我们首先使用String.LastIndexOf('{')查找最后一次出现的{,然后(使用该距离作为偏移量)计算长度,直到WIN}之前

答案 3 :(得分:0)

或者这个:

$str = "WindowsAuthServer @{htew804WIN}"
([regex]'@\{(\w+)WIN\}').Match($str).Groups[1].Value;