Как получить значение после первого = в powershell? - PullRequest
0 голосов
/ 05 июня 2018

В файле у меня есть

datasource =(Description=(failover=on)(load_balance=off) transport_connect_timeout=1)

Я хочу передать значение, используя $datasource.Хотя я использую

$datasource =Get-content "c:\file | select-string -pattern datasource"

, это дает мне целую строку

datasource =(Description=(failover=on)(load_balance=off)transport_connect_timeout=1) 

, но мне нужно только

(Description=(failover=on)(load_balance=off) transport_connect_timeout=1) 

, пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Select-String использует регулярные выражения с параметром -Pattern.

Я бы использовал более сложное выражение с положительным взглядом позади и группой захвата .

$datasource = sls .\file.txt -Patt '(?<=datasource =)(.*)$'|% {$_.Matches.groups[1].value}

Объяснение RegEx от regex101.com

(?<=datasource =)(.*)$
 Positive Lookbehind (?<=datasource =)
 Assert that the Regex below matches
 datasource = matches the characters datasource = literally (case sensitive)
1st Capturing Group (.*)
 .*
 . matches any character (except for line terminators)
 * Quantifier — Matches between zero and unlimited times, 
   as many times as possible, giving back as needed (greedy)
 $ asserts position at the end of a line

Канал к % {$_.Matches.groups[1].value} повторяет все совпадения и возвращает только содержимое группы захвата [1]

0 голосов
/ 05 июня 2018

Вот один из подходов:

$fullValue = "datasource =(Description=(failover=on)(load_balance=off) transport_connect_timeout=1)"
($fullValue -split "=" | Select-Object -Skip 1) -join "="
  1. Разделить строку на знаки равенства
  2. Получить все, кроме первой строки разделения
  3. Объединить их всех вместеснова используя знак равенства
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...