powershell - 如何使用命令 Select-String grep 两个字符串,使用正则表达式 `(str1|str2)`
问题描述
Q1:如何在 Select-String 中得到最短的匹配结果?
对于命令参数:
-source_file "proccess.log" -regex "D\:\\.*\.'(zip|7z|rar)'"
使用电源外壳文件:
param(
# Enter Source File Path
[Parameter(Mandatory=$True,Position=0)]
[ValidateNotNull()]
[string]$source_file,
# regex
[Parameter(Mandatory=$True,Position=1)]
[ValidateNotNull()]
[string]$regex
)
$result3=Get-Content -Path $source_file |Select-String -Pattern "$regex"|foreach {$_.Matches.Value}
Write-Output $result3
它总是输出最长的匹配字符串D:\test.zip D:\string1.zip" " D:\string2.rar
,比如我怎么能得到输出结果,比如:
D:\test.zip
D:\string1.zip
D:\string2.rar
然后我可以处理异常情况。
解决问题 1:
-source_file "proccess.log" -AllMatches -regex "D\:\\.*?\.'(zip|7z|rar)'"
感谢@AdminOfThings 的回答!
PS问题2是:为什么在正则表达式中使用括号必须用撇号结束?正则表达式是由猜测编写的......并且它有效。但我不知道为什么。
解决方案
推荐阅读
- asynchronous - 如何使承诺因clojure中的错误而失败?
- ruby - Ruby 2.3.8 的捆绑器版本?
- python - 部分功能是否“正式”可腌制?
- python - “AttributeError:'NoneType'对象没有属性'thread'”在Kaggle中提交时出错
- mysql - docker容器中的mysql说“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器”
- angular - 如何将逻辑从组件移动到服务(Angular)
- r - R 软件 - 从邻接矩阵创建有向加权图
- qt - 如何在 Qt5 中获取给定文件类型的应用程序建议列表?
- android - 如何修复 Android Studio 中的错误?AOSP 图像错误 0x500
- mysql - MySQL 外键约束错误 - 无法添加外键约束 - 错误 1822