我已经搜索了一个多小时,并没有完全找到我要找的东西。在继续之前,我正在尝试执行 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”,它仍然匹配。我怀疑它只匹配第一部分而不是我想要的整行?
答案 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 正则表达式。
^
:行的开头。
$
:行尾。
答案 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)