Grep 精确匹配 Kubernetes 命名空间(非文件)

Grep exact match for Kubernetes namespace (non-files)

背景:我的 k8s 集群中有两个部署(作为示例)如下:

foo-bar
foo-bar-asd

在我的管道中,我想实现逻辑来检查是否已经部署了名为“foo-bar”的任何部署。

如何将我的命令构造为仅 fetch/output“foo-bar”,而不是“foo-bar-asd”?

我试过使用正则表达式、“^foo-bar$”等,但没有成功,通过 googling/similar Whosebug-questions 找到。

我当前的命令(获取两者):

kubectl -n my-namespace get deployments | grep foo-bar 

提前感谢您的帮助!

编辑: 意识到乞丐不能选择,但是除了获取“foo-bar”之外我还需要命令不要明确提及“foo-bar-asd”。 (在放置此命令的地方构建一个管道,并且应该对不同的应用程序通用。没有完全解释,但希望有一点。)

grep命令也可以排除某些字符串。你可以 运行 类似

kubectl -n my-namespace get deployments | grep foo-bar | grep -v foo-bar-asd

这应该会告诉你你在找什么。

由于您的搜索模式包含连字符,您不能使用“仅限整个单词”,因为连字符被视为单词分隔符,所以我的第一个答案是错误的。
你需要说你的话代表整行,你可以这样做:

grep "^foo-bar$"

^代表“行首”。
$ 代表“行尾”。

编辑:第一个答案,错误。

我的 grep (GNU grep 3.4 ... 2019-12-29) 版本有一个 -w 开关,我可以用它来过滤“仅整个单词”,所以在你的情况下它是:

grep -w "foo-bar"