2016-03-24 7 views
1

В powershell у меня разные строки, например. следующее содержание (3 разных примера):Как удалить часть строки с помощью powershell?

name_something_else_10 
another_name_200 
what_ever_you_like_1234567 

Я хочу вырезать все после последнего подчеркивания. Так что я хочу, чтобы получить следующий:

name_something_else 
another_name 
what_ever_you_like 

Каждая строка предоставляется в качестве переменной, и мне нужен результат в переменной, а также. То, что я тогда искал, как вырезать часть строки с помощью функции, как следует:

$newString = CutOffEveryAfterUnderscore $oldString 

ответ

6

Вы можете использовать регулярное выражение ('_[^_]*$') в сочетании с функцией replace:

function Remove-LastUnderscore 
{ 
    [CmdletBinding()] 
    Param 
    (
     [Parameter(Mandatory=$true,Position=0)] 
     [string] 
     $string 
    ) 

    $string -replace '_[^_]*$' 
} 

Теперь вы можете использовать его как:

$newString = Remove-LastUnderscore $oldString 

или без функции:

$newString = $oldString -replace '_[^_]*$' 

Примечание: Это решение также работает со строками без подчеркивания.

4

Один из способов сделать это:

function Get-Prefix 
{ 
    param($str) 
    return $str.substring(0, $str.lastindexof('_')) 
} 

$strings = @("name_something_else_10", 
    "another_name_200", 
    "what_ever_you_like_1234567" 
) 

$strings | %{ 
    Get-Prefix $_ 
} 
Смежные вопросы