我试图让正则表达式正确返回一个或另一个,但不是两个:例如,当我运行以下命令时:
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-"))'