如何使 PowerShell `Select-String` 又名 `sls` 仅输出精确匹配?

问题描述 投票:0回答:1

在 PowerShell 脚本中,我想检查本地是否已经存在分支,我目前正在执行

$existsInLocal = (git branch | sls $branch) -ne $null
操作,但这是不正确的,因为
sls $branch
匹配包含
$branch
作为子字符串的行,但是我需要的是
sls $branch
的版本,它输出与
$branch
完全匹配的行。

有没有办法使用

^
$
分别指示行的开头和结尾?我的尝试没有成功。

我查看了

Select-String
文档,但没有找到解决方案。

还有一个几乎解决方案here,它使用

\b
,它匹配单词边界,但它不适用于我的情况,因为分支名称可以有
\W
字符(例如
/
-
)。例如,
\bjose/feature\b
将匹配
dev/jose/feature
(第一个
\b
匹配从
/
j
的过渡)或
jose/feature/v2
dev/jose/feature/v2


我知道还有另一种方法来检查本地分支是否存在,但我真的最感兴趣的是

sls
一般的精确匹配,而“确定本地分支是否存在”用例只是众多用例之一。

powershell select-string exact-match
1个回答
0
投票

重写您的正则表达式可能就是您所需要的。以下适用于带有斜杠和破折号的随机字符串。

^[\/\-\w+]+$

一些解释:

  • []+
    定义要匹配的字符列表,可以重复一次或多次
  • \/
    匹配斜杠(需要转义)
  • \-
    匹配破折号(也需要转义)
  • \w+
    匹配一个或多个单词字符(您已经发现了)
  • ^
    $
    将匹配行的开头和结尾(同样,你已经发现了)

因此列表中的内部捕获将匹配任何具有一个或多个单词字符、斜杠或破折号的字符串。如果您重复此操作一次或多次并包含行的开头和结尾,它将与您解释的模式匹配。

© www.soinside.com 2019 - 2024. All rights reserved.