Полезный ответ TessellatingHeckler показывает, как использовать метод .Split()
для выполнения разделения на основе разделителя, которое ограничивает число возвращаемых токенов, которые в его решении разделяются только на 1st _
экземпляр, чтобы вернуть всего 2 токенов.
В качестве отступления: вы также можете использовать собственный -split
оператор PowerShell , чье использование имеет свои преимущества :
$_ -split '_', 2 # in this case, same as: $_.split('_', 2)
Тем не менее, ваши последующие комментарии предполагают, что вы можете просто удалить все после 2-го _
экземпляра из вашеговходные строки.
$dbVersion, $scriptNumber, $null = $_ -split '_', 3 # -> e.g., '0.0.0.1', 03', '1'
Обратите внимание, как указание $null
в качестве переменной для получения третьего действующего токена отбрасывает этот токен, учитывая, что он нам не интересен.
Чтобы повторно объединить 2 полученных токена с _
, проще всего использовать оператор -join
:
$dbVersion, $scriptNumber -join '_'
Чтобы сложить все вместе:
# Sample array of input lines.
$lines=@'
0.0.0.1_03_1
0.0.0.1_03
0.0.0.1_02_2_1_3_4
0.0.0.1_02_1
0.0.0.1_02
0.0.0.1_01_1
0.0.0.1_01
'@ -split '\r?\n'
# Use Get-Content $SourceTxtDbFile instead of $lines in the real world.
$lines | ForEach-Object {
# Split by the first two "_" and save the first two tokens.
$dbVersion, $scriptNumber, $null = $_ -split '_', 3
# Re-join the first two tokens with '_'and output the result.
$dbVersion, $scriptNumber -join '_'
}
С вашим примером ввода это дает:
0.0.0.1_03
0.0.0.1_03
0.0.0.1_02
0.0.0.1_02
0.0.0.1_02
0.0.0.1_01
0.0.0.1_01