我如何得到正则表达式返回更准确?



我试图让正则表达式正确返回一个或另一个,但不是两个:例如,当我运行以下命令时:

aws secretsmanager list-secrets | jq -r ".SecretList[] | select(.Name|match("example-*")) | .Name "

返回

example-secret_key

examplecompany-secret_key

如何修改命令以返回其中一个而不返回另一个?由于

example-*匹配包含example和0个或多个-的字符串。

^example-匹配以example-开头的字符串。

jq -r '.SecretList[].Name | select( test( "^example-" ) )'

正则表达式不是shell glob/通配符。regex中的*并不表示"任何东西",而是表示"之前出现的东西重复0次或更多次"。.是一个单独的任意字符。.*为0个或多个任意字符。

如果你想匹配"example-"并且不关心后面是什么,只需使用正则表达式example-。如果要匹配"example-",然后匹配"_key",然后匹配"_key",使用正则表达式example-.*_key

jq -r '.SecretList[].Name | select(test("example-"))'

最新更新