使用 grep 命令处理多个字符串

使用 grep 命令处理多个字符串

我如何编写逻辑

Test total=100
Test scored=80 
Tests failed=0

我需要在 bash 文件中编写脚本来检查Test total,Test scored和是否Tests failed=0存在于文件中。我需要使用 grep 命令..但是在这种情况下如何检查新行?

还有数字100,80,我不需要寻找。只是之前的文字。

答案1

    grep -e "Test total=[0-9][0-9]*$" -e "Test scored=[0-9][0-9]*$" -e "Tests failed=[0-9][0-9]*$" foofile

考虑到您只想匹配下面给出的输入的前 3 行:

 Test total=100
 Test scored=80
 Tests failed=0

 Test total=100 alpha
 Test scored=80 beta
 Tests failed=0 gamma

 Test total=
 Test scored=
 Tests failed=

答案2

使用 bash 和 grep,您可以在函数中测试多个 grep 调用的返回状态,例如:

#!/usr/bin/env bash
failed_zero () {
    grep -q "Test total" "$1" || grep -q "Test scored" "$1" || grep -q "Test failed=0" "$1"
    return $?
}

# test first file name on command line
failed_zero $1
echo $?

答案3

尝试

found=$( egrep  "Test total|Test scored|Tests failed" -c  file )
if [ $found -eq 3 ]
then
  ## all three test
else
  ## some failed
fi

在哪里

  • egrep允许扩展 grep,即使用|(或)
  • -c给出匹配行的计数。
  • $( )将命令的结果作为变量返回。

相关内容