PowerShell、Where-Object(匹配方括号)(正则表达式)

Ken*_*Ken 1 powershell match square-bracket

我有一个 .txt 文件,系统将主机名写入其中;IPv4 地址或计算机名称,视具体情况而定。为了帮助解析文件,系统将 IP 地址或主机名放在方括号内。

例子:some text [192.168.1.1] some text

现在我想使用以下命令从文件中提取 IP 地址或计算机名称:

Get-Content -Path .\somefile.txt | Where-Object {$_ -match "[*]"}

但是当我运行这个时,我什么也没得到(我认为由于通配符和 -match,可能需要使用 -like?)

然后,如果我尝试只使用一个方括号:

Get-Content -Path .\somefile.txt | Where-Object {$_ -match "["}

我收到以下错误:

parsing "[" = Unterminated [] set.

有任何想法吗?我是否遇到了带有方括号的 PowerShell 限制,只需要选择不同的字符来帮助解析?建议?

小智 5

-match使用正则表达式语法:关于正则表达式

您需要转义特殊符号

C:\> "some text [192.168.1.1] some text" -match "\[*\]"
True
Run Code Online (Sandbox Code Playgroud)

要获取 IP 地址,请使用捕获组和$Matches内置变量。

C:\> "some text [192.168.1.1] some text" -match "\[(.*)\]"
True
C:\> $matches

Name                           Value
----                           -----
1                              192.168.1.1
0                              [192.168.1.1]

C:\> $matches[1]
192.168.1.1
Run Code Online (Sandbox Code Playgroud)

或命名捕获组。

C:\> "some text [192.168.1.1] some text" -match "\[(?<IpFromFile>.*)\]"
True
C:\> $matches

Name                           Value
----                           -----
IpFromFile                     192.168.1.1
0                              [192.168.1.1]

C:\> $matches['IpFromFile']
192.168.1.1
Run Code Online (Sandbox Code Playgroud)