如何 select 以 powershell 中的模式开头和结尾的字符串?
How to select a string which starts with and ends with a pattern in powershell?
我有一个包含以下数据的文本文件,我正在尝试获取以“WaitInstance”开头并以单引号结尾的字符串。
Some Data
Run 'WaitInstance -Id 000EACF-AAA-BBBB-9999-D864A60EDDF3' command to tell when it is available
Some Data
所以我想将上述文件中的以下数据放在一个变量中
WaitInstance -Id 000EACF-AAA-BBBB-9999-D864A60EDDF3
我正在使用以下代码来匹配模式,但 powershell 正在从文件中提取整行:
$SEL = Select-String -Path 'C:\Users\File.txt' -Pattern "WaitInstance"
救援正则表达式:
$r = [RegEx]"(WaitInstance.*)'"
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success } `
| ForEach-Object { $_.Groups[1].Value }
要理解最终的代码块,您可以一次只做一行:
输出文件的每一行:
Get-Content "C:\Users\File.txt"
输出文件的每一行,并将其转换为正则表达式匹配结果:
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) }
输出文件的每一行,并将每一行转换为正则表达式匹配结果,并过滤掉不符合模式的那些
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success }
将文件的每一行都pipe出来,并将每一行都转换为正则表达式匹配结果,并过滤掉不符合模式的,然后提取你感兴趣的部分(也就是部分在正则表达式的括号中):
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success } `
| ForEach-Object { $_.Groups[1].Value }
我有一个包含以下数据的文本文件,我正在尝试获取以“WaitInstance”开头并以单引号结尾的字符串。
Some Data
Run 'WaitInstance -Id 000EACF-AAA-BBBB-9999-D864A60EDDF3' command to tell when it is available
Some Data
所以我想将上述文件中的以下数据放在一个变量中
WaitInstance -Id 000EACF-AAA-BBBB-9999-D864A60EDDF3
我正在使用以下代码来匹配模式,但 powershell 正在从文件中提取整行:
$SEL = Select-String -Path 'C:\Users\File.txt' -Pattern "WaitInstance"
救援正则表达式:
$r = [RegEx]"(WaitInstance.*)'"
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success } `
| ForEach-Object { $_.Groups[1].Value }
要理解最终的代码块,您可以一次只做一行:
输出文件的每一行:
Get-Content "C:\Users\File.txt"
输出文件的每一行,并将其转换为正则表达式匹配结果:
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) }
输出文件的每一行,并将每一行转换为正则表达式匹配结果,并过滤掉不符合模式的那些
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success }
将文件的每一行都pipe出来,并将每一行都转换为正则表达式匹配结果,并过滤掉不符合模式的,然后提取你感兴趣的部分(也就是部分在正则表达式的括号中):
Get-Content "C:\Users\File.txt" `
| ForEach-Object { $r.Match($_) } `
| Where-Object { $_.Success } `
| ForEach-Object { $_.Groups[1].Value }