首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在windows powershell命令中对findstr使用"OR“和管道

如何在windows powershell命令中对findstr使用"OR“和管道
EN

Stack Overflow用户
提问于 2015-10-07 14:26:29
回答 2查看 805关注 0票数 1

我试图在Powershell命令下面解析获得mac地址列表。

代码语言:javascript
运行
复制
getmac | findstr "Device" | select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}

它给我的输出就像

代码语言:javascript
运行
复制
7C-05-07-0F-F8-69

我想再添加一次检查,以检查它是否以特定范围开始,如下所示

代码语言:javascript
运行
复制
getmac | findstr "Device" | findstr "7C:05:07" | findstr "08:00:27" | findstr "00:50:56" | select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}

但是这个findstr "Device" | findstr "7C:05:07" | findstr "08:00:27" | findstr "00:50:56"

不工作或操作,我在下面也尝试过

代码语言:javascript
运行
复制
 getmac | (findstr "Device" -or findstr "7C:05:07" -or findstr "08:00:27" -or findstr "00:50:56")

它在powershell中出现错误--请帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-08 06:58:48

谢谢马特的详细答复。

我也找到了一个解决同样的问题,我想张贴我的答案。

我们可以在命令提示符和powershell吹风中使用来自findstrfindstr选项或操作。

代码语言:javascript
运行
复制
getmac | findstr "Device" | findstr /c:"00-15-5D" /c:"08-00-27" /c:"00-50-56" /c:"52-54-00"| select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}

有关findstr的更多信息,请参考此链接

票数 1
EN

Stack Overflow用户

发布于 2015-10-07 14:44:09

由于上一个示例中的表达式格式错误,您将得到一个错误。我想你所犯的错误是:Expressions are only allowed as the first element of a pipeline.

您不能以这样的方式使用-or。运算符的每一侧都将被计算为布尔值。虽然我们可以使用子表达式来实现这一点,但您可能无法获得预期的结果。

总的来说,我建议仅仅用它来消除对findstr的所有需求

代码语言:javascript
运行
复制
getmac | select-string "[-A-F0-9]{17}" -AllMatches | Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value

然后我们就可以使用-or从那里过滤

代码语言:javascript
运行
复制
 getmac | select-string "[-A-F0-9]{17}" -AllMatches | 
    Select-Object -ExpandProperty Matches | 
    Select-Object -ExpandProperty Value | 
    Where-Object{$_ -match "7C:05:07" -or $_ -match "08:00:27" -or $_ -match "00:50:56"}

我会用regex做一些更简洁的事情。

代码语言:javascript
运行
复制
getmac | select-string "[-A-F0-9]{17}" -AllMatches | 
    Select-Object -ExpandProperty Matches | 
    Select-Object -ExpandProperty Value | 
    Where-Object{$_ -match "7C:05:07|08:00:27|00:50:56"}

如果这些必须在开头,则可以将最后一个正则表达式更改为以下内容:"^(7C:05:07|08:00:27|00:50:56)"

我还会考虑仅仅查询WMI来获取这些信息,而不是文本解析。

代码语言:javascript
运行
复制
Get-WmiObject win32_networkadapter | Where-Object{$_.MacAddress} | Select -ExpandProperty macaddress
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32994913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档