使用 PowerShell Split 和正则表达式在正则表达式匹配后返回所有内容



通过PowerShell日志,我试图提取命令,同时放弃运行命令的路径。例如,

PS C:Windowssystem32> pwd

我只想退回pwd。我知道.split可以实现这一点,但我很难让正则表达式正常工作。路径会有所不同,因此在特定路径上构建正则表达式将不起作用。我现在的尝试是匹配";PS";以及">";,例如这里的正则表达式CCD_ 4。然而,当路径中有字母"ps"时,这会导致意外的结果。

也不希望分割>,因为如果一个命令中有>,那么我不想修剪实际的命令。

只需取一行,将其拆分并取最后一行-如果您希望以这种方式,则不需要正则表达式

(("PS C:Windowssystem32> pwd") -split "> ",2)[-1]

不是最好的正则表达式,但可以完成任务:

("PS C:Windowssystem32> pwd") -replace "^.*?> ",""

编辑:更改了注释中提到的正则表达式-对于"不需要转义>quot;

是否要使用RegEx提取命令?

试试这个:

$Line = 'PS C:Windowssystem32> pwd'
if($Line -match '(?i)ps [a-z]:(?:\[a-z0-9]+)+>(?<Cmd>.*)') {
$Matches.Cmd
}

返回pwd。在>(之间放置一个空格,以删除前导空格。

最新更新