我试图让正则表达式正确地返回一个或另一个,但不是两个都返回:例如,当我运行以下命令时:
aws secretsmanager list-secrets | jq -r ".SecretList[] | select(.Name|match(\"example-*\")) | .Name "
它返回
example-secret_key
以及
examplecompany-secret_key
如何修改命令以返回其中一个而不返回另一个?谢谢
5vf7fwbs1#
example-*匹配包含example且后跟零个或多个-的字符串。^example-匹配以example-开头的字符串。
example-*
example
-
^example-
example-
jq -r '.SecretList[].Name | select( test( "^example-" ) )'
tgabmvqs2#
正则表达式不是shell glob/通配符。正则表达式中的*并不表示“任何内容”,而是“之前出现的内容重复0次或多次”。.是单个任意字符。.*是0个或更多个任意字符。如果你想匹配“example-”,而不关心后面的内容,只需使用正则表达式example-。如果你想匹配“example-",然后是anything或nothing,然后是“_key”,则使用正则表达式example-.*_key。
*
.
.*
example-.*_key
jq -r '.SecretList[].Name | select(test("example-"))'
2条答案
按热度按时间5vf7fwbs1#
example-*
匹配包含example
且后跟零个或多个-
的字符串。^example-
匹配以example-
开头的字符串。tgabmvqs2#
正则表达式不是shell glob/通配符。正则表达式中的
*
并不表示“任何内容”,而是“之前出现的内容重复0次或多次”。.
是单个任意字符。.*
是0个或更多个任意字符。如果你想匹配“example-”,而不关心后面的内容,只需使用正则表达式
example-
。如果你想匹配“example-",然后是anything或nothing,然后是“_key”,则使用正则表达式example-.*_key
。