Home > OS >  Get the next string after validating patterns using powershell
Get the next string after validating patterns using powershell

Time:11-04

I have a text file and the contents can be:

debug --configuration "Release" \p corebuild

Or:

-c "Dev" debug 

And now I have to validate the file to see if it has any pattern that matches --configuration or -c and print the string next to it

  • Pattern 1 - It should be Release
  • Pattern 2 - It should be Dev

How to achieve this in single command?

I tried below , but not sure how to extract only the release in the text , I only tried to see 1 pattern at a time

PS Z:\> $text = Get-Content 'your_file_path' -raw
PS Z:\> $Regex = [Regex]::new("(?<=\-\-configuration)(.*)")
PS Z:\> $Match = $Regex.Match($text)
PS Z:\> $Match.Value

 **Release /p net** 

Any help would be appreciated

CodePudding user response:

If I understand correctly and you only care about extracting the argument to the parameters and not which parameter was used, this might do the trick:

$content = Get-Content 'your_file_path' -Raw

$re = [regex] '(?i)(?<=(?:--configuration|-c)\s")[^"] '
$re.Matches($content).Value

See https://regex101.com/r/d2th35/3 for details.

From feedback in comments --configuration and -c can appear together, hence Regex.Matches is needed to find all occurrences.

CodePudding user response:

Get-Content 'your_file_path' |
  ForEach-Object { if ($_ -match ' (?:--configuration|-c) "(.*?)"') { $Matches.1 } }
  • Related