仅当所有模式都匹配时,才使grep成功

库特施凯姆

我想编写一个简单的测试,如果所有指定的模式都在输出中,则该测试成功。

具体来说,我正在测试程序是否正确使用配置文件进行自我配置。当我只有一个参数时,这种方法很好用,但是现在我要对多个参数执行相同的操作,而且现在看来我需要走不太快和较脏的方式了,因为如果任何一个模式都匹配,而不是全部匹配,则grep成功。

该程序:

    logger_ << yaaf::LogLevel::info << "intParam is " << get_parameters().intParam << std::endl;
    logger_ << yaaf::LogLevel::info << "boolParam is " << get_parameters().boolParam << std::endl;
    logger_ << yaaf::LogLevel::info << "charParam is " << get_parameters().charParam << std::endl;
    logger_ << yaaf::LogLevel::info << "floatParam is " << get_parameters().floatParam << std::endl;
    logger_ << yaaf::LogLevel::info << "doubleParam is " << get_parameters().doubleParam << std::endl;
    logger_ << yaaf::LogLevel::info << "longParam is " << get_parameters().longParam << std::endl;
    logger_ << yaaf::LogLevel::info << "uintParam is " << get_parameters().uintParam << std::endl;
    logger_ << yaaf::LogLevel::info << "ulongParam is " << get_parameters().ulongParam << std::endl;
    logger_ << yaaf::LogLevel::info << "stringParam is " << get_parameters().stringParam << std::endl;

当前测试:

 timeout 3 ${ini_test} | grep 'intParam is 1'

 timeout 3 ${ini_test} -i ${workspace}/tests/eclipseProject/algos/testsIni/initest.ini | grep 'intParam is 2'

什么不起作用:

timeout 3 ${ini_test} | grep -e 'intParam is 1' -e 'boolParam is false' -e 'charParam is a' [and so on...]

不起作用,因为如果任何模式匹配,grep将以代码0退出如果所有模式都可以与输出匹配,我希望它返回0

对于这种情况,我可能只会编写一些python代码来完成我想要的事情,但这种情况可能会在将来或其他情况下再次出现。我该如何解决这个问题?

亚当·卡兹(Adam Katz)

Grep将为您OR提供-e表达式的并(您可以通过链接类似的问题来解决此问题,|grep … |grep … |grep …但是我看到您的表达式都是纯文本而不是正则表达式,因此这是一个更快的awk解决方案:

timeout 3 ${ini_test} | awk '
  function in(s) { return index($0, s) }
  in("intParam is 1") && in("boolParam is false") && in("charParam is a") {
    print
    retval = 1
  }
  END { if (retval != 1) exit 1 }
'

我在这里定义了一个函数,以使其更清晰(假设您的“等等”字样,您有很多测试)。如果没有该功能,如何执行此操作应该很明显。

AWKindex(string, substring)为您substring提供给定string或零的索引(awk字符串未为零索引),因此,如果任何请求的子字符串不匹配,则index()返回零和条件短路。index()根据我的经验,AWK比快得多grep -F

AWK总是退出0(true),除非在END节中明确要求这样做exit如果足以停止评估,则可以在另一个节的末尾添加一个额外的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅当存在集合中的所有字符时才匹配

仅当所有查询的所有值都符合条件时才更新行

仅当所有匹配记录的值都相同时才选择记录

DAX:仅当数据集中所有年份的数据都存在时才计算

实体框架:仅当所有对象都存在时才更新多个对象

仅当集合中的所有项目都符合特定条件时,才返回集合ID

仅当所有try语句在Python中都成功时才运行语句

为什么grep不管模式如何都匹配所有行

应用两个Folds或Getters,仅当两个都成功时才成功

XPath:仅当所有子节点都具有特定值时,才获取父节点的属性

仅当所有匹配条件均失败时才更新标志

仅当包含搜索数组中的所有项目匹配时才过滤 JSON

仅当括在括号中时才匹配模式

c-仅当所有子级都终止时,waitpid()和co才检测到子级终止吗?

用grep查找所有匹配的模式

Grep:仅当*不落后于*另一个模式时才寻找模式

jQuery:仅当所有Ai也都具有Bi时才选择具有Ai和Bi类的迭代元素,或者根本不选择任何元素

Neo4j/Cypher 仅当谓词适用于所有关系时才匹配

仅当存在所有ID或更多ID时才在两个不同的列表对象之间找到匹配的ID?

仅当一列的所有元素都在另一个表中时才匹配

仅当另一个表中的所有外键都具有特定状态时才返回键值(ORACLE)

仅当某种模式前后不匹配时,我才如何使用正向和反向向后匹配?

当并非所有匹配项都存在时,正则 Expr

仅当两个单词都使用grep匹配时才显示输出

如何grep出与给定模式不匹配的所有行

仅当所有构建成功后才进行部署

仅当第一行与模式匹配时,才使用Awk解析文件

仅当行位于指定的行号并且与模式匹配时,才如何删除它?

仅当整行与正则表达式匹配时才替换模式