grep 模式匹配多个变量

时间:2021-03-17 02:40:22

标签: regex grep

我已经搜索了一个多小时,并没有完全找到我要找的东西。在继续之前,我正在尝试执行 grep 匹配以确保命令中的语法正确。

文件内容:

deploy type:apptype1 artifact:coolio version:1.1.1 in dev

我正在寻找的是允许多种类型、工件、版本,并且只允许 dev 或 qa。添加或丢失的任何其他文本都应该失败。

到目前为止我尝试过的是:

grep -ie "deploy type:apptype1\|apptype2\|apptype3 artifact:.*version:.*in dev\|qa file

问题是,如果我添加其他文本,甚至将“in”更改为“on”,它仍然匹配。我怀疑它只匹配第一部分而不是我想要的整行?

3 个答案:

答案 0 :(得分:2)

使用 GNU grep

grep -P '^deploy type:(apptype1|apptype2|apptype3) artifact:.*version:.*in (dev|qa)$' in_file

示例:

cat > in_file <<EOF
deploy type:apptype1 artifact:coolio version:1.1.1 in dev
deploy type:apptype2 artifact:coolio version:1.1.1 in qa
deploy type:apptype1 artifact:coolio version:1.1.1 on dev
EOF

grep -P '^deploy type:(apptype1|apptype2|apptype3) artifact:.*version:.*in (dev|qa)$' in_file

输出:

deploy type:apptype1 artifact:coolio version:1.1.1 in dev
deploy type:apptype2 artifact:coolio version:1.1.1 in qa

这里,GNU grep 使用选项:
-P:使用 Perl 正则表达式。

^ :行的开头。
$ :行尾。

另见:
perlre - Perl regular expressions

答案 1 :(得分:1)

根据您的示例,这里是 BSD/GNU grep 的解决方案:

grep -ie "deploy type:apptype[123] artifact:[[:alnum:]].* version:[[:alnum:]].* in [(dev\|qa)]" file

编辑

@timur-shtatland 的回答更好——我的回答不会排除“dev_test”或“qa_temp”

答案 2 :(得分:1)

这对我有用:

echo "deploy type:apptype2 artifact:coolio version:1.1.1 in dev" | grep -i -E "deploy type:(apptype1|apptype2|apptype3) artifact:.*version:.*in (dev|qa)"

注意下一行的 > 颜色表示前一个命令返回 0(绿色)或非零(红色)

vaidatingByExitCode

相关问题