regex 如何让正则表达式返回更准确的值?

i7uaboj4  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(123)

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

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

它返回

example-secret_key

以及

examplecompany-secret_key

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

5vf7fwbs

5vf7fwbs1#

example-*匹配包含example且后跟零个或多个-的字符串。
^example-匹配以example-开头的字符串。

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

tgabmvqs2#

正则表达式不是shell glob/通配符。正则表达式中的*并不表示“任何内容”,而是“之前出现的内容重复0次或多次”。.是单个任意字符。.*是0个或更多个任意字符。
如果你想匹配“example-”,而不关心后面的内容,只需使用正则表达式example-。如果你想匹配“example-",然后是anything或nothing,然后是“_key”,则使用正则表达式example-.*_key

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

相关问题