如果管道输出中的任何行以 powershell 中的某个字符与 Where-Object 开头,则匹配
Match if any line in a piped output begins with a certain character in powershell with Where-Object
我正在学习如何使用 powershell 制作在 git 命令输出上运行的脚本。
对于一次场景,我需要解析 git status --porcelain
并查看是否有任何行以某组字母开头。到目前为止我有:
if (git status --porcelain | Where-Object { $_ -match '^\?\?|DD|AU|UD|UA|DU|AA|UU' }) {
#do work
}
问题是 git status --porcelain
的输出没有命名列,所以我不能只访问 $_。查看它们是否与提供的正则表达式匹配。
是否可以在每一行上匹配正则表达式,或者拆分行并在每一行上匹配正则表达式?我不确定我应该如何进行
您可以逐行迭代 git 命令行的输出。如果有任何行与您的模式匹配,请将变量设置为 1
:
$found = 0;
ForEach($line in $(git status --porcelain)){ if ($line -match '^\?\? |DD|AU|UD|UA|DU|AA|UU') { $found = 1 } }
if ($found) {Write-Host "Found!"}
我在 ??
和您的模式中的文件名之间添加了一个 space。
我正在学习如何使用 powershell 制作在 git 命令输出上运行的脚本。
对于一次场景,我需要解析 git status --porcelain
并查看是否有任何行以某组字母开头。到目前为止我有:
if (git status --porcelain | Where-Object { $_ -match '^\?\?|DD|AU|UD|UA|DU|AA|UU' }) {
#do work
}
问题是 git status --porcelain
的输出没有命名列,所以我不能只访问 $_。查看它们是否与提供的正则表达式匹配。
是否可以在每一行上匹配正则表达式,或者拆分行并在每一行上匹配正则表达式?我不确定我应该如何进行
您可以逐行迭代 git 命令行的输出。如果有任何行与您的模式匹配,请将变量设置为 1
:
$found = 0;
ForEach($line in $(git status --porcelain)){ if ($line -match '^\?\? |DD|AU|UD|UA|DU|AA|UU') { $found = 1 } }
if ($found) {Write-Host "Found!"}
我在 ??
和您的模式中的文件名之间添加了一个 space。