通过终端中的正则表达式查找文件中是否存在子字符串

Find if a substring exists in file through regex in terminal

我有一个构建日志文件。我需要确定构建是否失败。如果通过,日志将只有“构建已退出,错误代码为 0”。现在我在日志文件中寻找的是类似于此“Build exited with errorcode *”的正则表达式,其中 * 可以是除零以外的任何 return 值。如果找到子字符串,则构建失败

例如:

  1. 如果发现“构建已退出,错误代码为 0”,则构建已通过。
  2. 如果“Build exited with errorcode 0”、“Build exited with errorcode 1”,则构建失败

它确实可以用 python 或其他语言完成,但我希望通过正则表达式在终端上完成。

文件内容:

mm,bn,hello,ssdenl.
sdfsdf,dfdf,dfdfe,ggg.
sdfd,gfgf
dfdfgfgdfgsdfgsdfg
dfgfdg,sdfsdfdhello.sdfasdfas/
sdfsdfdfgdfgdsfhellosdfasdfasdf
sdfasdfdfgffghjdkfjglfdg

寻找“你好”字段

^(?!.*hello).*$
if grep -Eq 'Build exited with errorcode ([^0]|[^[:space:]]{2,})' logfile; then
    echo build failed
else
    echo build passed
fi

这将打印 build failed,如果日志文件包含上述字符串的任何实例,其中 errorcode 之后的单词不是单个零。如果你想要 build failed 除了一个 或更多 零之外的任何东西,你可以改为使用:grep -q 'Build exited with errorcode [^[:space:]]*[^0][^[:space:]]*'.

请注意,在任何一种情况下,即使是日志文件中的句点 (Build exited with errorcode 0.) 也会打印 'failed'.

换句话说,此字符串的 all 个实例对于 passed 必须是 Build exited with errorcode 0(或者对于第二个示例最多为多个零,例如 0000).